.
Un suscriptor del canal de YuoTube, me solicitó realizar un ejemplo sobre como buscar datos en un rango de fechas y cargarlos o rellenar el listbox con estos datos; es decir se requería buscar datos de una hoja de Excel entre una fecha inicial y una fecha final, una vez encontrados esos datos, cargarlos en el listbox.
Anteriormente se presentaron muchos ejemplos relacionados con listbox, si estás leyendo este post es posible que te sean de utilidad:
Como escribir en el listbox el total de registros e importes
Como cargar cabecera o header buscar datos por cliente entre rango de fechas y cargar en listbox
Como buscar datos por cliente entre un rango de fechas
Como buscar datos entre rango de fechas |
Como pasar datos listbox a otro listbox con enter |
Como crear una factura o sale invoice seleccionando cliente de listbox
Como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail
Buscar en listbox mientras se escribe en textbox
Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.
Al descargar el formulario se observará dos textbox y un botón de comando, en el primer textbox se debe ingresar la fecha inicial y en el segundo la fecha final, luego se debe presionar el botón, se podrá observar como que se filtran los datos entre el rango de fechas ingresadas en los textbox, cargándose los datos que se encuentren entre la fecha inicial y la fecha final en el listbox que se encuentra en el formulario.
En este ejemplo además se aprenderá como cargar en variables los datos de textbox, lo cual se hace con el siguiente código, que carga en la variable dato1 y dato2 las fecha inicial y final respectivamente ingresadas en los textbox.
También se podrá observar como validar el ingreso de datos en textbox, la primer validación es pára que sea ingresado los datos fecha inicial y final antes de ejecutar la macro y la segunda valida que la fecha final no sea menor a la fecha inicial.
Para cargar los datos en el listbox debe pasar el filtro que se da con la instrucción If siguiente, que como se observa compara el dato de la variable fecha inicial y fecha final con el dato de la celda que se está recorriendo en ese momento con el bucle, que es necesario para recorrer todas las celdas de la primera a la última fila con datos, comparando la fecha de la base de datos con las fechas cargadas en los textbox, si se encuentra incluida en el rango de fechas, carga el dato en el listbox.
If dato0 >= dato1 And dato0 <= dato2 Then
También se podrá ver como cargar datos en listbox de varias columnas, lo cual se realiza con el siguiente código:
El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como por ejemplo como pasar datos de un listbox a otro listbox con enter, buscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, libro con las mejores macros del sitio web y muchos ejemplos más.
if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}
Código que se inserta en un módulo
Private Sub CommandButton2_Click()
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox («Debe ingresar datos para consulta entre rango de fechas»), vbCritical, «AVISO»
Exit Sub
End If
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End Ifb.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
dato0 = CDate(b.Cells(i, 2).Value)
If dato0 >= dato1 And dato0 <= dato2 Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)
End If
Next i
Me.ListBox1.ColumnWidths = «170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 7
.ColumnWidths = «170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «Hoja1!A2:» & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub
On Error Resume Next
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox («Debe ingresar datos para consulta entre rango de fechas»), vbCritical, «AVISO»
Exit Sub
End If
If dato2 < dato1 Then
MsgBox («La fecha final no puede ser mayor a la fecha inicial»), vbCritical, «AVISO»
Exit Sub
End If
b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear
For i = 2 To uf
dato0 = CDate(b.Cells(i, 2).Value)
If dato0 >= dato1 And dato0 <= dato2 Then
Me.ListBox1.AddItem b.Cells(i, 1)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 1) = b.Cells(i, 2)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 2) = b.Cells(i, 3)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 3) = b.Cells(i, 4)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 4) = b.Cells(i, 5)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 5) = b.Cells(i, 6)
Me.ListBox1.List(Me.ListBox1.ListCount – 1, 6) = b.Cells(i, 7)
End If
Next i
Me.ListBox1.ColumnWidths = «170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets(«Hoja1»)
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, «$») + 1, InStr(2, uc, «$») – 2)
With Me.ListBox1
.ColumnCount = 7
.ColumnWidths = «170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt»
.RowSource = «Hoja1!A2:» & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
End Sub
.
If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends