Formulario para Buscar datos con Multiples criterios en VBA Macros Excel
Aprende a programar el botón buscar en Formularios VBA con Macros en Excel. Permiten la búsqueda de datos utilizando múltiples criterios. Exploraremos cómo inicializar formularios y cargar datos, cómo implementar funcionalidades de búsqueda que filtran registros en base a diferentes parámetros.
1. Traer Datos de Excel a Listbox1. Evento Initialize
Private Sub UserForm_Initialize()
Me.ListBox1.RowSource = "CLIENTES"
Me.ListBox1.ColumnCount = 6
Me.ListBox1.RowSource = Clear
Me.ListBox1 = Clear
Final_Total = Hoja1.Range("B" & Rows.Count).End(xlUp).Row
Y = 0
For fila = 5 To Final_Total
Me.ListBox1.AddItem
'La Columna y la Fila comienza en 0
Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 2).Value
Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 3).Value
Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 4).Value
Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 5).Value
Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 6).Value
Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 10).Value
Y = Y + 1
Next fila
End Sub
Explicación del Código
Inicialización del UserForm
Private Sub UserForm_Initialize()
Este evento se ejecuta automáticamente cuando se inicializa el UserForm
.
Configuración Inicial del ListBox
Me.ListBox1.RowSource = "CLIENTES"
Me.ListBox1.ColumnCount = 6
Me.ListBox1.RowSource = Clear
Me.ListBox1 = Clear
Me.ListBox1.RowSource = "CLIENTES"
: Asigna una fuente de datos llamada «CLIENTES» alListBox1
.Me.ListBox1.ColumnCount = 6
: Establece que elListBox1
tendrá 6 columnas.Me.ListBox1.RowSource = Clear
yMe.ListBox1 = Clear
: Limpia cualquier dato existente en elListBox1
.
Encontrar la Última Fila con Datos
Final_Total = Hoja1.Range("B" & Rows.Count).End(xlUp).Row
Final_Total
obtiene el número de la última fila con datos en la columna B de Hoja1
.
Inicializar Contador de Filas para el ListBox
Y = 0
Y
se utiliza para contar las filas en el ListBox
.
Cargar Datos en el ListBox
For fila = 5 To Final_Total
Me.ListBox1.AddItem
'La Columna y la Fila comienza en 0
Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 2).Value
Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 3).Value
Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 4).Value
Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 5).Value
Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 6).Value
Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 10).Value
Y = Y + 1
Next fila
- Bucle For: Recorre las filas desde la 5 hasta la
Final_Total
. - Agregar Nueva Fila al
ListBox
:Me.ListBox1.AddItem
agrega una nueva fila vacía alListBox
. - Asignar Valores a las Celdas del
ListBox
:Me.ListBox1.List(Y, 0)
obtiene el valor de la celda en la fila actual y columna 2.Me.ListBox1.List(Y, 1)
obtiene el valor de la celda en la fila actual y columna 3.Me.ListBox1.List(Y, 2)
obtiene el valor de la celda en la fila actual y columna 4.Me.ListBox1.List(Y, 3)
obtiene el valor de la celda en la fila actual y columna 5.Me.ListBox1.List(Y, 4)
obtiene el valor de la celda en la fila actual y columna 6.Me.ListBox1.List(Y, 5)
obtiene el valor de la celda en la fila actual y columna 10.
- Incrementar Contador:
Y = Y + 1
incrementa el contadorY
para la siguiente fila delListBox
.
Finalización del Evento
End Sub
Este marca el fin del evento Initialize
.
2. Código en el Botón Buscar
Private Sub CommandButton1_Click()
Me.ListBox1.RowSource = Clear
Me.ListBox1 = Clear
Final_Total = Hoja1.Range("B" & Rows.Count).End(xlUp).Row
Y = 0
For fila = 5 To Final_Total
nombre = ActiveSheet.Cells(fila, 15).Value
If UCase(nombre) Like "*" & UCase(TextBox1.Value) & "*" Then
Me.ListBox1.AddItem
Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 2).Value
Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 3).Value
Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 4).Value
Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 5).Value
Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 6).Value
Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 10).Value
Y = Y + 1
End If
Next fila
End Sub
Explicación del Código
Evento de Click del Botón
Private Sub CommandButton1_Click()
Este evento se ejecuta cuando se hace clic en CommandButton1
.
Limpieza del ListBox
vbaCopiar códigoMe.ListBox1.RowSource = Clear
Me.ListBox1 = Clear
Estas líneas limpian cualquier dato existente en el ListBox1
.
Encontrar la Última Fila con Datos
Final_Total = Hoja1.Range("B" & Rows.Count).End(xlUp).Row
Final_Total
obtiene el número de la última fila con datos en la columna B de Hoja1
.
Inicializar Contador de Filas para el ListBox
Y = 0
Y
se utiliza para contar las filas en el ListBox
.
Bucle para Buscar y Filtrar Datos
For fila = 5 To Final_Total
nombre = ActiveSheet.Cells(fila, 15).Value
If UCase(nombre) Like "*" & UCase(TextBox1.Value) & "*" Then
Me.ListBox1.AddItem
Me.ListBox1.List(Y, 0) = ActiveSheet.Cells(fila, 2).Value
Me.ListBox1.List(Y, 1) = ActiveSheet.Cells(fila, 3).Value
Me.ListBox1.List(Y, 2) = ActiveSheet.Cells(fila, 4).Value
Me.ListBox1.List(Y, 3) = ActiveSheet.Cells(fila, 5).Value
Me.ListBox1.List(Y, 4) = ActiveSheet.Cells(fila, 6).Value
Me.ListBox1.List(Y, 5) = ActiveSheet.Cells(fila, 10).Value
Y = Y + 1
End If
Next fila
3. Seleccionar Código al hacer clic en un registro del Listbox1
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim Codigo_Registro As String
Codigo_Registro = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
MsgBox Codigo_Registro
End Sub
Explicación del Código
Declaración del Evento DblClick
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Este evento se ejecuta cuando el usuario hace doble clic en un elemento del ListBox1
.
Declaración de la Variable para el Código del Registro
Dim Codigo_Registro As String
Se declara una variable Codigo_Registro
de tipo String
para almacenar el código del registro seleccionado.
Obtención del Código del Registro Seleccionado
Codigo_Registro = Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
Esta línea obtiene el valor de la primera columna (índice 0) del elemento seleccionado en el ListBox1
:
Me.ListBox1.ListIndex
devuelve el índice del elemento seleccionado en elListBox
.Me.ListBox1.List(Me.ListBox1.ListIndex, 0)
accede al valor en la primera columna del elemento seleccionado.
Mostrar el Código del Registro en un Mensaje
MsgBox Codigo_Registro
Se muestra el código del registro seleccionado en un cuadro de mensaje.
Creación de un formulario con botones: Registrar, Modificar, Eliminar, Limpiar y Buscar .
- Video 01. Diseño de Formulario
- Video 02. Validar Email, Números y Textos
- Video 03. Validar y cambios de color Campos Vacíos.
- Vide4. Insertar Calendario Flotante y Calcular Edad
- Video 5. Duplicar Calendario y programar botón Examinar.
- Video 6. Programando Botón Registrar y Generar Código(Cli_0001)
- Video 08. Programando el botón Eliminar en VBA
Al escribir el código en VBA no me aparece nada en la ListBox, incluso copiando el código que aparece arriba
Hola, Buen día.
Pudieras ilustrarme como quedaría el código del botón «Buscar» para que muestre más de 10 columnas?
Gracias de antemano.
Descubrí mi error anterior… Pero ahora me marca error en Me.ListBox1.AddItem. Error ’70’ Permiso denegado 🙁
Me aparce en blanco cuando lo ejecuto, apesar de que si lleva el conteo 🙁