Cómo arreglar código VBA de Excel - Error 1004.No se puede obtener la propiedad LookUp de la Clase WorksheetFunction

Espero alguien me pueda ayudar, ¿qué está mal en este código? Cuando lo ejecuto me arroja el error 1004. No se puede obtener la propiedad LookUp de la Clase WorksheetFunction.

Private Sub ComboBox3_Change()

rut = Application.WorksheetFunction.VLookup(Me.ComboBox3.Value, Sheets("datos").Range("F:G"), 2, 0)
Me.label12.Caption = rut

End Sub

3 respuestas

Respuesta
3

Solo haz estas modificaciones a tu código, el problema se da cunado tecleas en el combobox en automático busca cada letra que tecles y si no la encuentra salta el error que te aparece.

Private Sub ComboBox3_Change()
INDICE = ComboBox3.ListIndex
If INDICE > -1 Then
rut = WorksheetFunction.VLookup(Me.ComboBox3.Value, Sheets("datos").Range("F:G"), 2, 0)
Me.Label12.Caption = rut
Else
Me.Label12.Caption = Empty
End If
End Sub
Respuesta
1

El problema de la función Application. WorksheetFunction. VLookup, es que si no encuentra el dato en el hoja, te va regresar error. Puede ser que el dato exista en el combo, pero de igual forma no necesariamente exista en la hoja y entonces enviará error.

Para "saltar" ese error se utiliza la sentencia On Error Resume Next, quedaría de esta forma:

Private Sub ComboBox3_Change()
    On Error Resume Next
    rut = Application.WorksheetFunction.VLookup(Me.ComboBox3.Value, Sheets("datos").Range("F:G"), 2, 0)
    If IsError(rut) Then
        'no existe
    Else
        Me.Label12.Caption = rut
    End If
End Sub

Esa es la forma de "saltar" el problema. Personalmente no me gusta utilizar la sentencia On Error, porque pueden existir otros errores y todos serán "saltados"; y no sabrás cuál fue el error.

Lo que generalmente utilizo es el método Find( ), quedaría de esta forma:

Private Sub ComboBox3_Change()
    Set h = Sheets("datos")
    Set b = h.Range("F:G").Find(Me.ComboBox3.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        Me.Label12.Caption = h.Cells(b.Row, "G")
    End If
End Sub

En el objeto b tienes el resultado de la búsqueda que realizó Find( ), tienes la fila, la celda, las propiedades de la fila, etc. Entonces de la hoja, la fila según el resultado y la columna G ya puedes llenar Label12.

Avísame cualquier duda.

Sal u dos

Respuesta

Sugiero creo que todas las propuestas son correctas pero la explicación buena del problema es la de James Bond. La del otro señor es errada, no la tomes en cuenta, es que la teoría no rs su fuerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas