Funcion if con msgbox si no coincide una busqueda

Tengo un userform que funciona muy bien con la función buscarV, mi problema es cuando t1 (textbox1) no encuentra la búsqueda me da error, y no se como expresar al condición IF, adjunto el código:

Private Sub CommandButton3_Click()
Dim ref As Integer
ref = t1.Value
nom = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 2, 0)
lcd = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 3, 0)
fec = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 5, 0)

Me.nombre.Caption = nom
Me.localidad.Caption = lcd
Me.fecha.Caption = fec
End Sub

2 Respuestas

Respuesta
1

Para expresarlo con If sería algo como esto:

Private Sub CommandButton3_Click()
    Dim ref As Integer
    ref = t1.Value
    nom = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 2, 0)
    lcd = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 3, 0)
    fec = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 5, 0)
    If Not IsError(nom) Then Me.nombre.Caption = nom Else werr = True
    If Not IsError(lcd) Then Me.localidad.Caption = lcd Else werr = True
    If Not IsError(fec) Then Me.fecha.Caption = fec Else werr = True
    If werr Then MsgBox "Dato no encontrado", vbExclamation
End Sub

Pero te recomiendo buscar con el método Find, de esta forma:

Private Sub CommandButton3_Click()
'Por.Dante Amor
    Set h = Sheets("Hoja1")
    Set b = h.Range("A:A").Find(t1.Value, lookat:=xlWhole)
    If Not b Is Nothing Then
        Me.nombre.Caption = h.Cells(b.Row, "B")
        Me.localidad.Caption = h.Cells(b.Row, "C")
        Me.fecha.Caption = h.Cells(b.Row, "E")
    Else
        MsgBox "Dato no encontrado", vbExclamation
    End If
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
1

Debes usar un manejador de excepciones en el caso de vba para excel, usaremos "On Error GoTo".

Funciona de la siguiente manera:

Colocamos la sentencia ante de empezar a hacer las búsquedas, indicando que en caso de error se dirija hacia una etiqueta (un área del código), la cual tendrá las instrucciones de que hacer.

En la etiqueta colocamos que hacer en caso de el error correspondiente, este caso con el uso de Vlookup, asumo que es error 1004.

Además agregaremos una verificación al textBox.

Quedaría algo así

Private Sub CommandButton3_Click()

     On Error GoTo MyErrorHandler:      '-----acá esta el manejador de errores.
     Dim ref As Integer

     If t1.value <> ""  Then  '----- comprobamos que t1 no este vacio.
              ref = t1.Value

              nom = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 2, 0)
              lcd = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 3, 0)
              fec = Application.VLookup(ref, Sheets("Hoja1").Range("A:G"), 5, 0)

              Me.nombre.Caption = nom
              Me.localidad.Caption = lcd
              Me.fecha.Caption = fec

    Else: MsgBox("Debe ingresar un numero")       '-----respuesta en caso de estar vació t1

    End If
Exit Sub                                '--------finalizamos el procedimiento si todo va bien.

    MyErrorHandler:              '----etiqueta a donde se dirige en caso de error

              If Err.Number = 1004 Then  '------el error que debes estar presentando

                    MsgBox ("No se encontró") 

               End If

End Sub

Hola Orlando, ante toda agradezco tu colaboración, te comento que la macro funciona bien, pero con números iguales o inferiores a cinco cifras, mi problema es que busco números telefónicos que utilizan entre ocho y once cifras, es bueno aclararte que el número de error que aparece es el 13. Es posible hacer algo para esa cantidad de cifras??. Por último, y en la misma macro pero otro inconveniente que encuentro (aislado de este tema), es que tengo un Label que indica la fecha, pero al seleccionarla me da el número sin formato de fecha, como se configura el label, podrás ayudarme? desde ya muchas gracias por todo. Cordiales saludos.

Para darte una idea rápida, el problema debe estar en el tipo de dato y el casteo a variant, usa string en vez de integer para ref, ahora lo veo mejor y te ayudo con el otro tema.

Hablamos ahora.

Hola Orlando..!!, pude corregir el problema con la variable "LONG", lo que no puedo solucionar todavía es que cuando llevo el dato de fecha al label fecha.caption , me trae el numero sin el formato de fecha, de todos modos la corercción que me enviaste fue IMPECABLE....!! te agradezco y seguimos en contacto, cordiales saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas