Custom Search

Combobox depende de otro combobox y llena listbox



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 llena 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 comenzar y si estás usando macros para automatizar tu libro de Excel seguramente te es necesario saber seleccionar o referenciar celdas, en FORMAS DE SELECCIONAR O REFERENCIAR CELDAS CON VBA (Spanish Edition) encontrarás una excelente ayuda; si trabajas con fechas en Excel, fíjate en el siguiente link que te puede ser de utilidad FORMATOS Y FUNCIONES DE FECHA Y HORA DE MICROSOFT EXCEL (Spanish Edition)

 

El ejemplo que puede descargarse GRATUITAMENTE desde el final de la página tiene por objeto llenar un combobox dependiendo de otro combobox y a su vez de este combobox depende un listbox. 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 llena un listbox.

Agregando la fecha de entrega del producto, y presionado el botón registrar, la macro busca el dato respectivo y agrega la fecha de entrega del producto correspondiente.

Recomiendo un excelente libro sobre Excel el cual te ayudará a operar las planillas de cálculo, haz click acá, si quieres un libro sobre Excel, en inglés, entonces debes hacer click acá. 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.

El ejemplo de macro que llena combobox dependiendo de otro combobox y a su vez controla los datos de un listbox, 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 la el llenado del primer combobox, luego del segundo combobox en base a los selecionado en el primer combobox; por último el listbox depende de lo seleccionado en el combobox anterior.



Código que se inserta en un módulo

Sub Botón1_Haga_clic_en()
UserForm2.Show

End Sub



Código que se inserta en un userform

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
ListBox1.Clear
ListBox1.ColumnCount = 6

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 de la celda list box
        a = ListBox1.ListCount
        ListBox1.AddItem
        ListBox1.List(a, 0) = Sheets("hoja2").Cells(fila, 1)
        ListBox1.List(a, 1) = Sheets("hoja2").Cells(fila, 2)
        ListBox1.List(a, 2) = Sheets("hoja2").Cells(fila, 3)
        ListBox1.List(a, 3) = Sheets("hoja2").Cells(fila, 4)
        ListBox1.List(a, 4) = Sheets("hoja2").Cells(fila, 5)
        ListBox1.List(a, 5) = 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
ListBox1.Clear
ComboBox1.SetFocus
MsgBox ("El registro se guardó con éxito"), vbInformation, "AVISO"
ComboBox3.Clear
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 fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.



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