Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

VBA: Filtrar en un ListBox

Veremos una manera rápida y ágil de mostrar elementos coincidentes similares en un ListBox a partir de un valor introducido en un TextBox.
Ya vimos algo similar en este post, pero en esta ocasión emplearemos las Array en nuestro código para agilizar el traspaso de información...

Nuestros datos en una hoja llamada 'Datos' y un rango A1:C11:



Nuestro formulario, reducido a lo necesario, tendrá:
1- un TextBox llamado 'TxtFiltro'
2- un ListBox llamdao 'ListFiltro'


Así pues añadimos la siguiente macro dentro de la ventana de código de nuestro UserForm en nuestro proyecto de VB:

Private Sub TxtFiltro_Change()
Dim myList() As Variant
Dim X As Long, Y As Long
Dim coincidencia As Boolean
coincidencia = False
Y = 0
'replicamos un filtro a visualizar sobre el ListBox
For X = 2 To Sheets("Datos").Range("A" & Rows.Count).End(xlUp).Row
If InStr(1, UCase(Sheets("Datos").Range("B" & X).Value), UCase(Me.TxtFiltro.Value)) > 0 Then
coincidencia = True
ReDim Preserve myList(2, Y)
'cargamos nuestra matriz....
myList(0, Y) = Sheets("Datos").Range("A" & X).Text
myList(1, Y) = Sheets("Datos").Range("B" & X).Text
myList(2, Y) = Sheets("Datos").Range("C" & X).Text
Y = Y + 1
End If
Next
'si hemos localizado alguna coincidencia...
If coincidencia = True Then
'mostramos datos coincidentes cargados en nuestra Array
Me.ListFiltro.List = Application.Transpose(myList)
Else
Me.ListFiltro.Clear
End If
End Sub

Private Sub UserForm_Activate()
Dim var As Variant
'cargamos en una Array el rango de datos...
With Sheets("Datos")
var = .Range("A2:C" & .Range("A" & Rows.Count).End(xlUp).Row).Value
End With
With Me.ListFiltro
.ColumnCount = 3 'indicamos número columnas
.ColumnWidths = "50;50;50" 'determinamos ancho...
If Not IsEmpty(var) Then
'si hay datos vaciamos el ListBox
.Clear
.List = var
End If
End With
End Sub


Además del uso de Array, y para compensar el desconocimiento a priori del número de registros coincidentes, hacemos de nuevo uso de la definición de tamaño de una Array, empleando ReDim Preserve, que nos habilita la opcíon de incorporar nuevos registros de manera 'ilimitada' manteniendo los datos cargados.
Esta técnica evita los conteos previos de coincidencias...


Al ejecutar el UserForm comprobaremos cómo a medida escribimos en el TextBox, el filtro se muestra directamente sobre los elementos del campo 'Concepto', tal como buscábamos.


This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here

Share the post

VBA: Filtrar en un ListBox

×

Subscribe to Excel Foro: Ejercicios, Ejemplos, Soluciones, Duda

Get updates delivered right to your inbox!

Thank you for your subscription

×