.
Un suscriptor de nuestro canal de YouTube en base a un vídeo publicado antiguamente denominado Combobox depende de otro combobox y carga datos en textbox, requería que si lo mismo era factible realizarlo con tres combobox, no solo que es factible sino que se mejoró el ejemplo de macro original al cargar solo datos únicos sin duplicados en cada combobox, en otras palabras en el ejemplo se muestran tres combobox dependientes que luego carga datos en los textbox.
Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.
Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, 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.
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);
}
}
La particularidad que tiene el formulario es que los tres combobox que se encuentran insertos en dicho formulario son dependientes uno de otro, es decir el segundo depende del primero y el tercer combobox depende de los datos seleccionados en el segundo combobox.
Quizá sea de utilidad también
Como usar WorksheetFunction sumar IF
Como crear un hiperlink a hojas de otro libro
Como verificar si existe un libro de excel en un directorio, caso negativo lo crea
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Al iniciar el formulario se cargan los datos de la columna A en el combobox1 por supuesto el combobox se carga sin duplicados, es decir con datos únicos; seleccionando un item en el combobox1 del formulario, se procede a filtrar los datos y cargar en el comobox2, solo los registros coincidentes con los seleccionado en el Combobox1; de igual forma al seleccionar un item del combobox2, se llena el combobox3 , cuyos datos son dependiente de lo seleccionado en el combobox2.
Por último si seleccionamos un dato o ítem en el combobox3 automáticamente se rellenan los textbox son los datos relacionados con el ítem seleccionado en el combobox3.
A continuación se presenta la codificación completa del ejemplo denominado Como Cargar Tres Combobox Dependiendo de Otro Combobox y carga los datos en Textbox.
Código que se inserta en un formulario
Public dir
Private Sub ComboBox1_Change()
Dim fila As Integer, uf As Integer, d1 As String, d2 As String
Dim sd As New Collection, celda As Range, dato, r As String
On Error Resume Next
Set a = Sheets(«Hoja2»)
fila = 2
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
ComboBox2.Clear
ComboBox3.Clear
While a.Cells(fila, 1) <> Empty
d1 = ComboBox1
d2 = a.Cells(fila, 1)
If d1 = d2 Then
sd.Add a.Cells(fila, 4), CStr(a.Cells(fila, 4).Value)
End If
fila = fila + 1
Wend
For Each dato In sd
ComboBox2.AddItem dato
Next datoEnd Sub
Private Sub ComboBox2_Change()
Dim fila As Integer, uf As Integer, d1 As String, d2 As String
Dim sd As New Collection, celda As Range, dato, r As String
On Error Resume Next
Set b = Sheets(«Hoja2»)
fila = 2
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
ComboBox3.Clear
While b.Cells(fila, 1) <> Empty
d1 = ComboBox2
d2 = b.Cells(fila, 4)
If d1 = d2 Then
sd.Add b.Cells(fila, 5), CStr(b.Cells(fila, 5).Value)
End If
fila = fila + 1
Wend
For Each dato In sd
ComboBox3.AddItem dato
Next dato
End Sub
Private Sub ComboBox3_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 = ComboBox3
‘Si el dato de la fila coincide con textbox carga los datos al listbox
var = Sheets(«hoja2»).Cells(fila, 5)
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 ComboBox4 = Empty Then
MsgBox («Debe cargar fecha de salida»), vbCritical, «AVISO»
ComboBox3.SetFocus
Exit Sub
End If
Sheets(«hoja2»).Range(dir).Offset(0, 2) = ComboBox4
ComboBox1.Clear
ComboBox2.Clear
ComboBox3.Clear
ComboBox4 = 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
Código que se inserta en un módulo
Private Sub ComboBox1_Change()
Dim fila As Integer, uf As Integer, d1 As String, d2 As String
Dim sd As New Collection, celda As Range, dato, r As String
On Error Resume Next
Set a = Sheets(«Hoja2»)
fila = 2
uf = a.Range(«A» & Rows.Count).End(xlUp).Row
ComboBox2.Clear
ComboBox3.Clear
While a.Cells(fila, 1) <> Empty
d1 = ComboBox1
d2 = a.Cells(fila, 1)
If d1 = d2 Then
sd.Add a.Cells(fila, 4), CStr(a.Cells(fila, 4).Value)
End If
fila = fila + 1
Wend
For Each dato In sd
ComboBox2.AddItem dato
Next dato
End Sub
Private Sub ComboBox2_Change()
Dim fila As Integer, uf As Integer, d1 As String, d2 As String
Dim sd As New Collection, celda As Range, dato, r As String
On Error Resume Next
Set b = Sheets(«Hoja2»)
fila = 2
uf = b.Range(«A» & Rows.Count).End(xlUp).Row
ComboBox3.Clear
While b.Cells(fila, 1) <> Empty
d1 = ComboBox2
d2 = b.Cells(fila, 4)
If d1 = d2 Then
sd.Add b.Cells(fila, 5), CStr(b.Cells(fila, 5).Value)
End If
fila = fila + 1
Wend
For Each dato In sd
ComboBox3.AddItem dato
Next dato
End Sub
Private Sub ComboBox3_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 = ComboBox3
‘Si el dato de la fila coincide con textbox carga los datos al listbox
var = Sheets(«hoja2»).Cells(fila, 5)
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 ComboBox4 = Empty Then
MsgBox («Debe cargar fecha de salida»), vbCritical, «AVISO»
ComboBox3.SetFocus
Exit Sub
End If
Sheets(«hoja2»).Range(dir).Offset(0, 2) = ComboBox4
ComboBox1.Clear
ComboBox2.Clear
ComboBox3.Clear
ComboBox4 = 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
Sub Botón1_Haga_clic_en()
UserForm2.Show
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