Vlookup VBA: Datos en otra hoja

Estoy intentando hacer un vlookup del TextBox1 y que si lo encuentra, me ponga el valor correspondiente a la columna 2 de una BD, en el TextBox2 (Ambos TextBox se encuentran en un UserForm). Sin embargo, no he podido definir el rango de búsqueda en la hoja en que se encuentran los datos ( "Proveedores"). Espero me puedan ayudar!

El código es el siguiente:

Private Sub TextBox1_AfterUpdate()
Dim value As Variant
Dim Rango As Range
Dim Resultado As Variant
value = TextBox1.value
Set Rango = Sheets("Proveedores").Range("A1:H6")
Resultado = Application.VLookup(value, Rango, 2, Falso)
If IsError(Resultado) Then
MsgBox ("NOT FOUND")
Else
TextBox2 = Resultado
End If

End Sub

1 respuesta

Respuesta
1

El problema es el rango o el que no te está encontrando el dato.

Si el proveedor es un número, entonces hay que cambiar el dato del textbox1 a número.

También te sugiero que cambies el método de búsqueda a Find( )

Prueba con lo siguiente:

Private Sub TextBox1_AfterUpdate()
    If TextBox1 = "" Then Exit Sub
    TextBox2 = ""
    If IsNumeric(TextBox1.value) Then valor = Val(TextBox1.value) Else valor = TextBox1.value
    Set h = Sheets("Proveedores")
    Set r = h.Range("A:A")                  'busca en toda la columna A
    Set b = r.Find(valor, lookat:=xlWhole)  'busca con Find
    If b Is Nothing Then
        MsgBox ("NOT FOUND")
    Else
        TextBox2 = b.Offset(0, 1).value
    End If
End Sub

El resultado se almacena en el objeto b

Si te es más fácil comprenderlo, puedes cambiar esto:

TextBox2 = b.Offset(0, 1).value

Por esto:

TextBox2 = h.Cells(b.Row, "B")

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Dante Amor,

Primero, muchas gracias!!

Segundo, aunque recién empiezo a programar en vba, entiendo perfecto el código que me envías. Incluso, creo que con find queda mejor, por si se encuentran celdas vacías en el rango de búsqueda(por eso lo cambiaste?)

Sin embargo, al probarlo, me arroja el error: "Error en el método select de la clase Worksheet"

Espero me puedas ayudar con eso!

Lo cambié porque evita el error que se genera en vlookup y me parece más práctico Find( ) que Vlookup; con Find( ) tienes el objeto resultante y de ahí puedes obtener la fila, la columna, el valor, el color, el font, etc.

¿Cambiaste algo en la macro?

¿En qué fila de la macro se detiene?

Dante Amor,

No sé por qué, pero comenzó a funcionar.

Te agradezco muchísimo la ayuda!

Espero encontrarnos por aquí en otra ocasión.

Saludos!

Sí, con todo gusto!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas