Les muestro el código que hace posible filtrar datos con el comando InStr, mientras que el criterio de búsqueda a evaluar será una columna. Es decir que si el usuario escribe un fragmento, palabra completa en el TextBox1 del evento Change muestra los registros que coincidan con la columna B, que es el nombre.
Para que esto sea posible realizar lo siguiente:
- Crear una hoja con datos.
- Ingresar al editor VBA excel.
- Insertar un formulario con los componentes:
- Etiqueta (Label1)
- Caja de texto (TextBox1)
- Cuadro de lista (ListBox1)
- Escribir el siguiente código.
Private Sub TextBox1_Change()
Dim lngregistros, i As Long
Dim intfila As Integer
'Definimos el número de columnas
Me.ListBox1.ColumnCount = 7
'Definimos el ancho de cada columna
Me.ListBox1.ColumnWidths = "30;160;80;80;80;80;80"
'Limpiar el lixtbox
ListBox1.Clear
'Agregar el elemento en las respectivas columnas
ListBox1.AddItem
intfila = ListBox1.ListCount - 1
ListBox1.Column(0, intfila) = "ID"
ListBox1.Column(1, intfila) = "NOMBRE"
ListBox1.Column(2, intfila) = "FEC_NAC"
ListBox1.Column(3, intfila) = "SEXO"
ListBox1.Column(4, intfila) = "DIRECCION"
ListBox1.Column(5, intfila) = "TELEFONO"
ListBox1.Column(6, intfila) = "CORREO"
'Contamos el numero de registros en la hoja 1
lngregistros = Hoja1.Range("A1").CurrentRegion.Rows.Count
'Recorre todos los registros a partir de la fila 2 de la hoja1
For i = 2 To lngregistros
'Si contiene alguna cadena de la columna 2 que coincida con TextBox1
If InStr(Hoja1.Cells(i, 2), Me.TextBox1.Value) Then
'Carga a la lista el registro de la hoja 1
ListBox1.AddItem Hoja1.Cells(i, 1)
ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Hoja1.Cells(i, 2)
ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Hoja1.Cells(i, 3)
ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Hoja1.Cells(i, 4)
ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Hoja1.Cells(i, 5)
ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Hoja1.Cells(i, 6)
ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Hoja1.Cells(i, 7)
End If
Next i
End Sub
No hay comentarios.:
Publicar un comentario