VLookUp Excel Vba no funciona

Como están, estoy empezando a programar en Vba y necesito ayuda:

Tengo una base de datos en Hoja1 A2:AZ3100

En un formulario quiero que al poner el id automáticamente me llene los otros campos como nombre y carrera.

Intente así:

Private Sub TextBox1_Change()
  Dim Nombre As String
  Dim Rango As Range
  Set Rango = Sheets(1).Range("A1:AZ3100")
  Nombre = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Rango, 2, 0)
  Me.TextBox2.Value = Nombre
End Sub

Pero apenas escribo algo me sale Error 1004 - No se puede Obtener la propiedad VLookup

¿Cómo lo Hago?

2 respuestas

Respuesta
1

Tiene que ver con el tipo de dato que le esta pasando Me. TextBox1.Value y con el tipo de dato que realmente es el ID.

Por ejemplo, si el ID es un String: X1234, en ese caso la X lo convierte en String y tu código no daría "problema" teóricamente (en la practica si por como lo tienes hecho).

Pero si los ID son solo 1234, mas que un String es un Integer o un Long, y tu código daría problema porque vLookup espera un String, y TextBox1.Value le esta pasando un Integer o Long

Talvez piensas, bueno convierto el valor a String, no, tampoco funcionara.

Lo que tienes que hacer es pasarle a vLookup lo que realmente es, así:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim txt1 As Long: txt1 = Me.TextBox1.Value
Dim Nombre As String
Dim Rango As Range
Set Rango = Sheets(1).Range("A1:AZ3100")
On Error GoTo errH
    Nombre = Application.WorksheetFunction.VLookup(txt1, Rango, 2, 0)
    Me.TextBox2.Value = Nombre
Exit Sub
errH:
MsgBox "No se encontró"
End Sub

Y si te fijas, te puse el código en el evento Exit. Si tu quieres un autocompletado mientras escribes (evento Change) habría que cambiar todo.

También te puse un Error Catcher, ya que cuando vLookup no encuentra lo que busca arroja error.

Respuesta
1

Una mejor opción a Vlookup es usar MAtch(coincidir) este es un ejemplo de como se vería el resultado con solo teclear el id coincidir buscaría en la columna A el numero de ID y te traería en automático toda la información referente a ese ID en este caso noombre y carrera

esta es tu macro modificada para usar Match, otra cosa cambie el evento change por un afterupdate la razón el primero buscaría información cada vez que teclearas una letra y te pondría error afterupdate te da la oportunidad de escribir completo el ID y en cuanto des enter buscara la información, otra cosa Match tiene la ventaja que puedes traer información hacia arriba, hacia abajo o hacia los lados tantas filas o columnas como quieres sin neceseidad de escribir nuevos vlookups cosa que no te deja hacer Vlookup que solo se mueve hacia adelante

Private Sub TextBox1_AFTERUPDATE()
  Dim Nombre As String
  Dim Rango As Range
  Set Rango = Sheets(1).Range("A1:AZ3100")
  INDICE = Application.WorksheetFunction.Match(Val(TextBox1.Text), Rango.Columns(1), 0)
  Me.TextBox2.Text = Rango.Cells(INDICE, 2)
  Me.TextBox3.Text = Rango.Cells(INDICE, 3)
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas