Problema con Vlookup en VBA, tengo este código en un formulario, pero no de resultado, en lugar eso devuelve el error 1004.

Private Sub CommandButton2_Click()

Dim Std As Variant

Std = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Sheets("Componentes L2").Range("A:K"), 2, 0)
Me.TextBox2.Value = Std

End Sub

Respuesta
1

Es mejor utilizar la método Find

Prueba esto:

Private Sub CommandButton2_Click()
  Dim f As Range
  TextBox2.Value = ""
  Set f = Sheets("Componentes L2").Range("A:A").Find(TextBox1.Value, , xlValues, xlWhole, , , False)
  If Not f Is Nothing Then
    TextBox2.Value = f.Offset(0, 1).Value
  Else
    MsgBox "Dato en el textbox no existe"
  End If
End Sub

Muchas gracias si funciona muy bien, pero que hay si tengo un Textbox3, Textbox4, Textbox5, etc.?

Mi idea es incluir un else if por cada uno de ellos, pero, hay una forma mejor?

Saludos!

En el objeto f tienes el objeto de la celda encontrada, entonces puedes hacerlo así:

Private Sub CommandButton2_Click()
  Dim f As Range
  TextBox2.Value = ""
  Set f = Sheets("Componentes L2").Range("A:A").Find(TextBox1.Value, , xlValues, xlWhole, , , False)
  If Not f Is Nothing Then
    TextBox2.Value = f.Offset(0, 1).Value
    TextBox3.Value = f.Offset(0, 2).Value
    TextBox4.Value = f.Offset(0, 3).Value
    TextBox5.Value = f.Offset(0, 4).Value
    TextBox6.Value = f.Offset(0, 5).Value
    TextBox7.Value = f.Offset(0, 6).Value
    '
    '...
  Else
    MsgBox "Dato en el textbox no existe"
  End If
End Sub

O si tienes muchos textbox:

Private Sub CommandButton2_Click()
  Dim f As Range
  Dim i As Long
  TextBox2.Value = ""
  Set f = Sheets("Componentes L2").Range("A:A").Find(TextBox1.Value, , xlValues, xlWhole, , , False)
  If Not f Is Nothing Then
    For i = 2 To 7
      Controls("TextBox" & i).Value = f.Offset(0, i - 1).Value
    Next
  Else
    MsgBox "Dato en el textbox no existe"
  End If
End Sub


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas