En llenar listbox dependiendo de otro listbox y combobox, llenar combobox y buscar datos, son entre otros post están relacionados con el presente ejemplo denominado Combobox depende de otro combobox y carga datos en textbox, a diferencia de combobox depende otro combobox y llena listbox, donde en vez de cargar los datos en textbox, se llena un listbox, también existen otros donde se exponen macros sobre como recorrer las filas con macro y son: recorrer filas buscando y comparando datos, recorrer filas y contar celdas con datos, recorrer filas y copiar de la columna A a la B, además hay varios ejemplos que encontrarás aquí.
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.
Aquí te muestro una macro que utiliza un formulario en el se encuentra un combobox que depende de otro combobox, es decir en base a los datos que se seleccionen en el primer combobox se llenará el segundo combobox; una vez seleccionados los datos en el segundo combobox, la macro buscará en la base de datos y cargará todos los datos en los textbox insertados en el formulario.
Al cargar el formulario se carga en el primer combobox un listado de productos, los cuales los filtra para que salgan solo productos únicos y evitar duplicados; dependiendo del dato seleccionados en este combobox se llena el segundo combobox a su vez de los datos seleccionados en el segundo combobox se buscan los datos y rellenan los textbox 1 a 6 tal cual se dijo anteriormente.
Tiene un aditamento, que es un combobox que se encuentra al final que permite modificar la fecha, aquí se debe agregar el nuevo dato y presionar el botón registrar, la macro busca el dato respectivo y agrega la fecha de entrega del producto correspondiente.
El ejemplo de macro que llena combobox dependiendo de otro combobox y a su vez controla los datos de varios textbox, se puede descargar desde el link del final de este post, una vez descargado el ejemplo se presiona el botón que dice «Ejecutar Macro» y se ejecuta la macro realizando el llenado del primer combobox, luego del segundo combobox en base a los seleccionado en el primer combobox; y luego se cargará en los textbox los datos correspondientes de ítem seleccionado.
Código que se inserta en un módulo
Sub Botón1_Haga_clic_en()
UserForm2.Show
End Sub
Public dir
Private Sub ComboBox1_Change()
Dim fila As Integer
Dim uf As Integer
Dim d1, d2 As String
fila = 2
uf = Sheets(«hoja2»).Range(«A» & Rows.Count).End(xlUp).Row
ComboBox2.Clear
While Sheets(«hoja2»).Cells(fila, 1) <> Empty
d1 = ComboBox1
d2 = Sheets(«hoja2»).Cells(fila, 1)
If d1 = d2 Then
ComboBox2.AddItem Sheets(«hoja2»).Cells(fila, 4)
End If
fila = fila + 1
Wend
End Sub
Private Sub ComboBox2_Change()
‘Evito movimientos de la pantalla
Application.ScreenUpdating = False
Dim fila, a As Integer
Dim dato, var As String
‘On Error Resume Next
‘Borra datos del listbox
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
TextBox6 = Empty
a = 0
fila = 2
‘Bucle mientras la fila no esté vacia
While Sheets(«hoja2»).Cells(fila, 4) <> Empty
dato = ComboBox2
‘Si el dato de la fila coincide con textbox carga los datos al listbox
var = Sheets(«hoja2»).Cells(fila, 4)
If var = dato Then
dir = Sheets(«hoja2»).Cells(fila, 4).Address(False, False)
‘Copia los datos en textbox
TextBox1 = Sheets(«hoja2»).Cells(fila, 1)
TextBox2 = Sheets(«hoja2»).Cells(fila, 2)
TextBox3 = Sheets(«hoja2»).Cells(fila, 3)
TextBox4 = Sheets(«hoja2»).Cells(fila, 4)
TextBox5 = Sheets(«hoja2»).Cells(fila, 5)
TextBox6 = Sheets(«hoja2»).Cells(fila, 6)
End If
‘Aumento la fila para que pase a la siguiente
fila = fila + 1
Wend
‘Devuelvo movimientos de la pantalla
Application.ScreenUpdating = True
End Sub
Private Sub CommandButton2_Click()
If ComboBox3 = Empty Then
MsgBox («Debe cargar fecha de salida»), vbCritical, «AVISO»
ComboBox3.SetFocus
Exit Sub
End If
Sheets(«hoja2»).Range(dir).Offset(0, 2) = ComboBox3
ComboBox1.Clear
ComboBox2.Clear
ComboBox3.Clear
TextBox1 = Empty
TextBox2 = Empty
TextBox3 = Empty
TextBox4 = Empty
TextBox5 = Empty
TextBox6 = Empty
ComboBox1.SetFocus
MsgBox («El registro se guardó con éxito»), vbInformation, «AVISO»
End Sub
Private Sub CommandButton3_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim sd As New Collection
Dim celda As Range
Dim dato
Dim r As String
Dim uf As Integer
Application.ScreenUpdating = False
On Error Resume Next
ComboBox1.Clear
Sheets(«hoja2»).Select
Range(«A2»).Select
uf = Range(«A» & Rows.Count).End(xlUp).Row
r = «A2:A» & uf
For Each celda In Range(r)
sd.Add celda.Value, CStr(celda.Value)
Next celda
For Each dato In sd
ComboBox1.AddItem dato
Next dato
Application.ScreenUpdating = True
End Sub
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends