¿Cómo puedo buscar un dato en un textbox, con las fórmulas indirecto & coincidir?

Los amigos expertos de este excelente foro, la noche de hoy me he encontrado con una limitante en un pequeño procedimiento en un textbox, no lo he podido resolver y me siento un poco frustrado. Pido amablemente a ustedes me puedan ayudar con este procedimiento. Espero alguien pueda auxiliarme.

Esta es la situación:

Tengo un textbox en un formulario, lo que estoy tratando de hacer es encontrar un dato en dicho textbox, y quisiera utilizar este método:

=INDIRECTO("SALID!I"&COINCIDIR(J11,SALID!I:I, 0)), con la excepción de que J11 sería textbox7 y textbox8 sería donde me arrojará el resultado de la fórmula.

No pude llevar a cabo este procedimiento porque excel no maneja indirecto en worksheetfunction y sólo pude encontrar la de coincidir que es match.

Me quedo algo así:

TextBox8 = Application.Match(TextBox7.Value, Sheets("SALID").Range("I:I"), 0)  'textbox7= J11

Lo que no entiendo es que en el textbox8 no me arroja ningún resultado y veo la fórmula y creo que esta bien, pero no se que sea el problema.

Espero haberme explicado, y de antemano gracias a todos. Muchos saludos!

1 Respuesta

Respuesta
2

Por más que lea tu enunciado no encuentro la razón de que utilices INDIRECTO en este caso.

La función INDIRECTO la solemos utilizar cuando necesitamos un resultado a la izquierda del dato buscado, cosa que no hace BUSCARV que devuelve datos a la derecha.

Pero en un textbox quizás no necesites la fórmula sino el dato, entonces se utilizan otras instrucciones.

En el código que adjunto, al ejecutar el botón te mostrará en TextBox8 el nro de fila donde se encuentra el dato que ingresas en TextBox7, sería la parte de COINCIDIR.

Y en la sgte, muestro en otro TextBox el dato que se encuentra a la izquierda (col H) del dato encontrado en col I

Private Sub CommandButton1_Click()
'x Elsamatilde
'devuelve el nro de fila donde se encuentra el dato Textbox7
TextBox8 = Application.Match(TextBox7.Value, Sheets("SALID").Range("I:I"), 0)
'devuelve el contenido que se encuentra en la col H del dato encontrado
Set busco = Sheets("SALID").Range("I:I").Find(TextBox7, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then TextBox9 = busco.Offset(0,-1)
End Sub

Creo que esto último es lo que necesitas. Si no es así deja un pequeño ejemplo con valores y resultado esperado para orientarme.

Hola Elsa, antes que nada muchas gracias por responder.

Bien he aquí un detalle, hice el procedimiento que me propones y me aparece un error: "No se puede configurar la la propiedad value. Los tipos no coinciden.

Pero aparte de eso lo que buscaba era que al momento de cambiar un dato en el evento chance me arrojara el resultado en el textbox y no en un evento click de un comandbutton.

Explico mas a fondo; El formulario que ejecuto esta en la hoja DEV1, el dato que busco es "128" que tengo en la columna J de dicha hoja y este dato lo cargo al textbox7.

La segunda hoja donde se busca el dato "128" se llama ENT y el dato se encuentra en la columna I.

El evento change del formulario lo manejo de esta forma:

Private Sub cbo_Nombre_Change()
On Error Resume Next
Application.ScreenUpdating = False


If lista(cbo_Nombre.Text) <> 0 Then
Sheets("DEV1").Activate

cells(cbo_Nombre.ListIndex + 11, 1).Select

TextBox1 = ActiveCell.Offset(0, 4)
TextBox2 = ActiveCell.Offset(0, 5)
TextBox3 = ActiveCell.Offset(0, 6)
TextBox4 = ActiveCell.Offset(0, 7)
TextBox5 = ActiveCell.Offset(0, 8)

TextBox7 = ActiveCell.Offset(0, 9) 'aquí carga el dato 128

Else

TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""

TextBox6=  ""


End If
Application.ScreenUpdating = True
End Sub

y en un módulo

Function lista(nombre As String) As Integer
Application.ScreenUpdating = False
Sheets("DEV1").Activate
Range("A11").Activate
lista= 0
Do While Not IsEmpty(ActiveCell)
If nombre = ActiveCell Then
lista= ActiveCell.Row
End If
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Function

Lo del botón era solo un ejemplo para pasarte las instrucciones.

Todavía no queda claro qué buscas en hoja ENT pero imaginaré que necesitas la info que se encuentra en col H del dato encontrado.

Observa la imagen. Al seleccionar tu código del combo, se llenan los controles Textbox y al Change del textbox7 se busca en hoja ENT (¿no era SALID? ) En col I el dato, devolviendo lo de col H

Si esto se parece a tu caso, la macro siguiente te servirá.

Private Sub TextBox7_Change()
Set busco = Sheets("ENT").Range("I:I").Find(Val(TextBox7), LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then TextBox8 = busco.Offset(0, -1)
End Sub

Sdos y comentame 

Elsa

Observa que ahora utilizo la función VAL(TextBox7) por tratarse de valores y no texto, esto evitará mensajes de error.

Sdos!

Hola Elsa!, excelente respuesta, es lo que estaba buscando. Muchas gracias por tu ayuda y amabilidad.

Una disculpa por equivocar las hojas, fue mi error.

Nuevamente gracias Elsa, recibe un gran saludo de mi parte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas