Como relaciono dos combobox's sabiendo que uno depende de otro

Pues tengo varias consultas para hacerle pero iniciare primero con esto ir solucionando mis dudas.

Pues tengo una Plantilla en Excel en la cual contiene los campos Entrega, Movilidad, destino, hora de Despacho, Numero Bultos., etc, etc.. Para esto he creado una macro colocándole en el Formulario los campos que necesito mas la creación de dos Combobox's el primer es el combobox1 que contiene las Entregas y el segundo el Combobox2 las Movilidades, lo que hice a inicio solo fue generar el combobox1 de las Entregas en la cual cuando yo selecciono cada entrega me muestra el detalle de esta y ademas le coloque condiciones cuando se realice la validación. Pero me he visto la necesidad de agregarle el otro combobox2 que contiene las Movilidades.

Pregunta:

1. Como puedo hacer que cuando seleccione cada movilidad me deba mostrar en el combobox1 las entregas que estén amarradas a esa movilidad y así para la otras movilidades.

2. Como dije el combobox1 contiene todas las Entregas, lo cual mi consulta seria si se deberán afectadas, ya que contiene condiciones por la cual se ejecutan según diferentes condiciones que le he colocado.

La información se extrae de la hoja de "PlantillaFija" las columnas que contiene la Entrega es la "E" y la Movilidad en la columna "P" .

Gracias por su apoyo.

Respuesta
1

Te dejo el siguiente archivo de ejemplo para que veas como combinar los 2 combos

Combos combinados dependientes

1 respuesta más de otro experto

Respuesta
2

Con el siguiente código cargas las Movilidades únicas

Private Sub UserForm_Activate()
'por.Dante Amor
    Set h1 = Sheets("PlantillaFija")
    For i = 2 To h1.Range("P" & Rows.Count).End(xlUp).Row
        agregar cmbMovilidad, Cells(i, "P")
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
'por.Dante Amor
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

Para hacer la dependencia entre el combo movilidad y el combo1, agrega el siguiente código.

Private Sub cmbMovilidad_Change()
'Por.Dante Amor
    Set h = Sheets("PlantillaFija")
    Set r = h.Columns("P")
    Set b = r.Find(cmbMovilidad, lookat:=xlWhole)
    ComboBox1.Clear
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            ComboBox1.AddItem h.Cells(b.Row, "E")
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
End Sub

Lo que hace es buscar el dato que pusiste en cmbMovilidad, cada vez que encuentre un dato, entonces agrega al combobox1 el dato de la columna E.


Saludos. Dante Amor

No olvides valorar la respuesta.

¡Gracias! 

Estimado Dante
A que se refiere cuando indica esta parte 
r.Find(cmbMovilidad, lookat:=xlWhole)
ncell= b.address
Gracias!!

Lo que hace, es buscar ("Find"), lo que tiene el combo movilidad en el un rango ("r"). El rango ("r") se establece en la línea anterior:

Set r = h.Columns("P")

El parámetro xlwhole, es para indicar que la búsqueda sea exacta.

Y en conjunto lo que hace la macro es buscar todas las coincidencias exactas que hay en la columna "P" y cuando la encuentra agrega el dato de la columna "E" en el combobox1.

En la instrucción ncell = b.address, se almacena en la variable ncell el primer resultado encontrado, como la búsqueda está en un ciclo, cuando regresa a la misma celda, es decir, al primer resultado, entonces se detiene el ciclo.

Loop While Not b Is Nothing And b.Address <> ncell

Con la función Find, es más rápido que revisar fila por fila.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas