ComboBox Dependientes – Ejercicio Práctico
Es más que seguro que en distintos artículos de internet, en archivos de tu trabajo o clase haz notado que existen estas listas desplegables:
Pues en el caso de la imagen estas listas están condicionadas por la anterior, menos la primera. Estas listas desplegables funcionan como un tipo de filtro, aquí no existe el clásico procedimiento con fórmulas o funciones, con formulario todo es más dinámico y rápido.
CASO FORMULARIO COMBOBOX DEPENDIENTE
Una empresa que se dedica a la comercialización de autos requiere para su almacén una herramienta que permita registrar las entradas de vehículos por tipo y marca.
DESARROLLO
Primero necesitaremos de una base de datos, en este caso toda la información está dentro de la hoja de trabajo con nombre BD, tenemos cinco tipos de vehículos y por cada tipo 3 marcas, menos la última que solo tiene dos marcas.
Diseño del formulario
Con el cuadro de herramientas insertamos 1 UserForm, 2 Label, 2 Combobox y 2 CommandButton.
A continuación, vamos a mostrar las propiedades de los 8 objetos insertados en el formulario:
CÓDIGO TOTAL DEL FORMULARIO
CÓDIGO USERFORM – EVENTO INITIALIZE
‘Evento: Activate – Cada vez que el formulario inicie
Private Sub UserForm_Activate()
‘Seleccionar la hoja donde se encuentra la base de datos
Sheets(«BD»).Select
‘Calcular la ultima fila de dicha base de datos, tomando
‘como referencia la columna A
ultfila = Columns(«A:A»).Range(«A» & Rows.Count).End(xlUp).Row
‘Bucle para cargar los datos al combobox1 (Tipo)
For fila = 2 To ultfila
‘Si la referencia es diferente de vacío
‘Cargar los datos al combobox
If Cells(fila, 1) <> «» Then
ComboBox1.AddItem (Cells(fila, 1))
End If
Next
‘Seleccionar la hoja Destino
Sheets(«Destino»).Select
End Sub
CÓDIGO COMBOBOX1 – EVENTO: CHANGE
‘Evento: Change- Cada vez que suceda cambios en el combobox1 (Tipo)
Private Sub ComboBox1_Change()
‘Limpiar el combobox2 (Marca)
ComboBox2.Clear
‘Seleccionar la hoja BD
Sheets(«BD»).Select
‘Validar la celda a cargar en el combobox2 (Marca)
‘dependiente del combobox1 (Tipo)
columna = ComboBox1.ListIndex + 3
Cells(2, columna).Select
ultfila = Columns(«A:A»).Range(«A» & Rows.Count).End(xlUp).Row
‘Bucle para cargar los datos de la columna seleccionada al combobox2 (Marca)
For fila = 2 To ultfila
‘Si la selección es diferente de vacío cargar los datos al combobox2 (Marca)
If Cells(fila, columna) <> «» Then
ComboBox2.AddItem (Cells(fila, columna))
End If
Next
‘Seleccionar la hoja Destino
Sheets(«Destino»).Select
End Sub
CÓDIGO BOTÓN INSERTAR – EVENTO: CLICK
‘Evento: Click – Por cada clic en el botón Insertar
Private Sub btnInsertar_Click()
‘Bucle para validar el combobox1 (Tipo) y combobox2 (Marca)
If ComboBox1.ListIndex = -1 Then
MsgBox «Debe seleccionar un tipo de la lista», vbCritical, «Sistema»
Exit Sub
ElseIf ComboBox2.ListIndex = -1 Then
MsgBox «Seleccione una marca»
Exit Sub
End If
‘Calcular la última fila de la hoja Destino
ultfila = Sheets(«Destino»).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
‘Mandar los datos del combobox1 (Tipo) y combobox2 (Marca) a la hoja Destino
Sheets(«Destino»).Cells(ultfila, 2).Value = ultfila – 7
Sheets(«Destino»).Cells(ultfila, 3).Value = ComboBox1.Text
Sheets(«Destino»).Cells(ultfila, 4).Value = ComboBox2.Text
‘Alinear y poner marco a la datos mandados a la hoja Destino
Sheets(«Destino»).Cells(ultfila, 2).VerticalAlignment = xlCenter
Sheets(«Destino»).Cells(ultfila, 2).HorizontalAlignment = xlCenter
Sheets(«Destino»).Cells(ultfila, 3).VerticalAlignment = xlCenter
Sheets(«Destino»).Cells(ultfila, 3).HorizontalAlignment = xlCenter
Sheets(«Destino»).Cells(ultfila, 4).VerticalAlignment = xlCenter
Sheets(«Destino»).Cells(ultfila, 4).HorizontalAlignment = xlCenter
Range(Cells(ultfila, 2), Cells(ultfila, 4)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
End With
End Sub
CÓDIGO BOTÓN SALIR – EVENTO: CLICK
‘Evento: Click – Por cada clic en el botón Salir
Private Sub btnSalir_Click()
‘Salir del formulario
Unload Me
End Sub
MACRO PARA EJECUTAR EL FORMULARIO
Sub Botón1_Haga_clic_en()
‘Mostrar el formulario en pantalla
UserForm1.Show
End Sub
Para ejecutar esta macro vamos a insertar el botón – EJECUTAR.
Para que aprendas a insertar un botón – Control de Formulario te dejo aquí el enlace.
Hemos logrado crear una herramienta que facilite el registro de información, pero con la singularidad de tener listas desplegables dependientes que permiten ni siquiera visualizar la hoja donde esta la data.
Deja una respuesta