ComboBox dependiente en formulario de Excel, en lista horizontal

Estoy desesperado ya que no encuentro una solución a mi problema, el cual describiré a continuación:

Tengo dos ComboBox y quiero hacer uno dependiente del otro dentro de un formulario, mis listas se agrupan de manera horizontal... Por ejemplo:

ComboBox1 - Celda (A1:A100) / ComboBox2 - Celdas a la derecha, (10 Celdas B1:K1 )

         A                B                        C                     D...

1    Aves        Carpintero            Cotorra           Perico 

2   Caninos   Chihuahueño       Salchicha        Bulldog

3   Felinos     Tigre                    León               Puma

Mis rangos reales tienen otros nombres, pero para el ejemplo supongamos que, la lista de la "columna A" tiene como nombre de rango "Animales" y cada fila de "B:K" tienen de nombre los rangos, "Animales1", "Animales2", "Animales3"... Etc.

No se sí se pueda hacer desde las propiedades del ComboBox con la formula de "=INDIRECTO" como en las listas dentro de la hoja de Excel o por estar dentro de un formulario se requiera forzosamente de crear un código...

1 Respuesta

Respuesta
3

H o l a:

Si tienes los combox en un userform, utiliza el siguiente código. Cambia "Hoja4" por el nombre de tu hoja.

Es importante que los datos a cargar en el combobox1 se carguen en el evento Activate, de esa forma sabremos en qué fila se encuentra el dato seleccionado. Según tus indicaciones los datos empiezan en la fila 1.

Private Sub ComboBox1_Change()
'Por.Dante Amor
    ComboBox2.Clear
    If ComboBox1 = "" Then Exit Sub
    If ComboBox1.ListIndex = -1 Then Exit Sub
    f = ComboBox1.ListIndex + 1
    Set h = Sheets("Hoja4")
    u = h.Cells(f, Columns.Count).End(xlToLeft).Column
    For j = 2 To u
        ComboBox2.AddItem h.Cells(f, j)
    Next
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    'cargar el combo1
    Set h = Sheets("Hoja4")
    ComboBox1.RowSource = h.Name & "!A1:A" & h.Range("A" & Rows.Count).End(xlUp).Row
End Sub

Cuando seleccionas un dato del combobox1, se activa el evento Change, y lo que hace es cargar los datos en el combo2.


No te recomiendo que utilices Indirecto, ya que si tienes 100 valores en el combo1, tendrías que crear 100 nombres, y si modificas la cantidad de valores de cada nombre, tendrías que estar actualizando la longitud de cada nombre.

Con la macro que te estoy enviando las filas y la cantidad de columnas por fila se calculan en automático.


' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas