You are on page 1of 3

El ejemplo que puede descargarse GRATUITAMENTE desde el final de la pgina 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 botn 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
clculo, haz click ac, si quieres un libro sobre Excel, en ingls, entonces debes
hacer click ac. Si lo que necesitas es aprender o profundizar sobre la programacin 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 botn 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.

Cdigo que se inserta en un mdulo

Sub Botn1_Haga_clic_en()
UserForm2.Show

End Sub

Cdigo 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

You might also like