Como Cargar Tres Combobox Dependiente de Otro Combobox Carga Textbox





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.

  

Mira la macro en acción con una explicación más detallada de su codificación y funcionamiento, 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 Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









 


Al abrir el archivo de Excel de ejemplo se podrá observar un botón, si se presiona dicho botón, se ejecuta una macro que muestra un formulario de Excel con cuatro combobox al inicio y una serie de textbox que es donde se cargan los datos de la base de datos que se encuentran en la hoja 2.

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 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



Código que se inserta en un  módulo

Sub Botón1_Haga_clic_en()
UserForm2.Show
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