Búsqueda en TextBox con en tres columnas

Tengo este código que me funciona, pero deseo agregarle la opción de que al salir del TEXTBOX si no encuentra ninguno de los resultados me muestre un mensaje y se quede en el mismo TEXTBOX, dejo el código, para ver si alguien puede ayudarme, gracias.

Private Sub cui_Exit(ByVal Cancel As MSForms.ReturnBoolean)

On Error Resume Next
uf = Hoja2.Range("J" & Rows.Count).End(xlUp).Row

If cui = "" Then

cui.SetFocus
Exit Sub
End If

Hoja2.AutoFilterMode = False
Me.listado = Clear
Me.listado.RowSource = Clear

For fila = 19 To uf
caso = Hoja2.Cells(fila, 10).Value
nombre = Hoja2.Cells(fila, 2).Value
apellido = Hoja2.Cells(fila, 3).Value

If caso Like "*" & cui.Value & "*" Then
Me.listado.AddItem
Me.listado.List(x, 0) = Hoja2.Cells(fila, 1).Value
Me.listado.List(x, 1) = Hoja2.Cells(fila, 2).Value
Me.listado.List(x, 2) = Hoja2.Cells(fila, 3).Value
Me.listado.List(x, 3) = Hoja2.Cells(fila, 10).Value
Me.listado.List(x, 4) = Hoja2.Cells(fila, 17).Value
x = x + 1
ElseIf UCase(nombre) Like "*" & UCase(cui.Value) & "*" Then
Me.listado.AddItem
Me.listado.List(x, 0) = Hoja2.Cells(fila, 1).Value
Me.listado.List(x, 1) = Hoja2.Cells(fila, 2).Value
Me.listado.List(x, 2) = Hoja2.Cells(fila, 3).Value
Me.listado.List(x, 3) = Hoja2.Cells(fila, 10).Value
Me.listado.List(x, 4) = Hoja2.Cells(fila, 17).Value
x = x + 1
ElseIf UCase(apellido) Like "*" & UCase(cui.Value) & "*" Then
Me.listado.AddItem
Me.listado.List(x, 0) = Hoja2.Cells(fila, 1).Value
Me.listado.List(x, 1) = Hoja2.Cells(fila, 2).Value
Me.listado.List(x, 2) = Hoja2.Cells(fila, 3).Value
Me.listado.List(x, 3) = Hoja2.Cells(fila, 10).Value
Me.listado.List(x, 4) = Hoja2.Cells(fila, 17).Value
x = x + 1
End If

Next

Me.listado.ColumnWidths = "40 pt;125 pt;125 pt;40 pt;75 pt"

End Sub

1 respuesta

Respuesta
2

Prueba lo siguiente.

La declaración de la variable debe ir al principio de todo tu código.

Dim salir As Boolean

Sustituye tu código por lo siguiente:

Dim salir As Boolean
'
Private Sub cui_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim uf As Long, fila As Long, x As Long
  '
  If cui = "" Then
    Cancel = True
    Exit Sub
  End If
  '
  Hoja2.AutoFilterMode = False
  With listado
    .Value = ""
    .RowSource = ""
    .Clear
    .ColumnWidths = "40 pt;125 pt;125 pt;40 pt;75 pt"
    uf = Hoja2.Range("J" & Rows.Count).End(xlUp).Row
    For fila = 19 To uf
      If Hoja2.Cells(fila, 10).Value Like "*" & cui.Value & "*" Or _
        UCase(Hoja2.Cells(fila, 2).Value) Like "*" & UCase(cui.Value) & "*" Or _
        UCase(Hoja2.Cells(fila, 3).Value) Like "*" & UCase(cui.Value) & "*" Then
        . AddItem
        .List(x, 0) = Hoja2. Cells(fila, 1).Value
        .List(x, 1) = Hoja2. Cells(fila, 2).Value
        .List(x, 2) = Hoja2. Cells(fila, 3).Value
        .List(x, 3) = Hoja2. Cells(fila, 10).Value
        .List(x, 4) = Hoja2.Cells(fila, 17).Value
        x = x + 1
      End If
    Next
  End With
  If x = 0 And salir = False Then
    MsgBox "No existen coincidencias"
    Cancel = True
  End If
End Sub
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  salir = True
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas