Varios pares de combobox dependientes en un userform

Solicito de su amable colaboración indicándome si ya hay respuesta a esta inquietud. He buscado en temas relacionados pero no encuentro algo parecido. Ahí va mi duda:
Tengo un userform con 3 pares de combobox dependientes. Ya logré que un par de ellos funcionara, sin embargo cuando agrego el siguiente par de combobox, un combobox de dicho segundo par toma los valores de un combobox del primer par. Para mi caso, en el userform el primer par de combobox dependientes son regional y oficina; el segundo par son item e item de la selección. El error supongo debe estar en: Private Sub UserForm_Initialize(). Agradezco opiniones y propuestas

Otra inquietud, como hacer para que una vez guarde el registro, ¿me deje en blanco esos combobox para grabar un nuevo registro? Ya logré borrar los otros textbox que necesito dejar en blanco, pero con los dependientes no pude.
Por favor si alguien me referencia sobre este tema o me indica si ya alguien lo habia preguntado, les estaré inmensamente agradecida.
En el libro van muchas hojas ya que he estado intentando de muchas formas y no logrado el resultado esperado.

Private Sub cmdCerrar_Click()
Unload Me
'Call Proteger
End Sub

Private Sub cmbMarcaCte_Change()
ComboBox1.Clear
indice = cmbMarcaCte.ListIndex + 1
Cells(2, indice).Select
Do While ActiveCell.Value <> ""
ComboBox1.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Private Sub ComboBox11_Change()
ComboBox14.Clear
indice = ComboBox11.ListIndex + 1
Cells(2, indice).Select
Do While ActiveCell.Value <> ""
ComboBox14.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Private Sub CommandButton1_Click()
ComboBox5 = Empty
ComboBox8 = Empty
ComboBox9 = Empty
ComboBox10 = Empty
ComboBox13 = Empty
ComboBox12 = Empty
ComboBox15 = Empty
ComboBox16 = Empty
TextBox5 = Empty
TextBox6 = Empty
End Sub
Private Sub cmdRegistrar_Click()

'INICIO DE VALIDACIONES
'Call Desproteger
'ALTA DE LOS REGISTROS
Set TransRowRng = ThisWorkbook.Worksheets("base").Cells(1, 1).CurrentRegion
NewRow = TransRowRng.Rows.Count + 1
With ThisWorkbook.Worksheets("base")
.Cells(NewRow, 2).Value = ComboBox2
.Cells(NewRow, 4).Value = TextBox1
.Cells(NewRow, 5).Value = TextBox2
.Cells(NewRow, 6).Value = ComboBox4
.Cells(NewRow, 7).Value = ComboBox3
.Cells(NewRow, 8).Value = ComboBox5
.Cells(NewRow, 9).Value = TextBox5
.Cells(NewRow, 10).Value = fecha
.Cells(NewRow, 11).Value = ComboBox9
.Cells(NewRow, 12).Value = ComboBox8
.Cells(NewRow, 13).Value = ComboBox10
.Cells(NewRow, 14).Value = ComboBox13
.Cells(NewRow, 15).Value = ComboBox12
.Cells(NewRow, 16).Value = ComboBox11
.Cells(NewRow, 16).Value = ComboBox14
.Cells(NewRow, 17).Value = ComboBox15
.Cells(NewRow, 18).Value = ComboBox16
.Cells(NewRow, 19).Value = TextBox6
End With
End Sub

Private Sub Label39_Click()

End Sub

Private Sub UserForm_Activate()
'LLENADO DE COMBOS
Me.ComboBox2.RowSource = "tipounidad"
Me.ComboBox4.RowSource = "profesion"
Me.ComboBox3.RowSource = "Noevaluacion"
Me.ComboBox5.RowSource = "documhc"
Me.ComboBox8.RowSource = "finaconsu"
Me.ComboBox9.RowSource = "Tipo_Consulta"
Me.ComboBox10.RowSource = "fasefalla"
Me.ComboBox13.RowSource = "criterio"
Me.ComboBox12.RowSource = "consulta"
Me.ComboBox15.RowSource = "riesgos"
Me.ComboBox16.RowSource = "suceso"
End Sub

Private Sub UserForm_Initialize()

ComboBox11.Clear
Sheets("items").Select
Range("A1").Select
Do While ActiveCell.Value <> ""
ComboBox11.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop

cmbMarcaCte.Clear
Sheets("regional").Select
Range("A1").Select
Do While ActiveCell.Value <> ""
cmbMarcaCte.AddItem ActiveCell
ActiveCell.Offset(0, 1).Select
Loop
End Sub

1 Respuesta

Respuesta

Te respondo la primer cuestión, luego seguimos con el resto.

Cada combo 'principal' tendrá valores ya ubicados en alguna lista y se cargarán en el evento Initialize o desde las propiedades del control.

Por ej:

Private Sub UserForm_Initialize()
For Each cd In Sheets("Herramientas").Range("B5:B" & Sheets("Herramientas").Range("B" & Rows.Count).End(xlUp).Row)
    ComboBox1.AddItem cd.Value
Next cd
'otro combo principal:
For Each cd In Sheets("Listas").Range("A5:A" & Sheets("Listas").Range("A" & Rows.Count).End(xlUp).Row)
    ComboBox3.AddItem cd.Value
Next cd
End if

Como mencionas que ya tenés resuelto el primer par, indicame cómo o con qué instrucciones y las referencias de los otros controles para completarte los otros pares.

PD) En mi guía temática N° 2 hay algunos ejemplos que quizás echen luz a tu problema.

Buenas tardes Elsa,

Gracias por el aporte. Sin embargo el ejemplo que me envías no me genera combobox dependientes. Si tienes un ejemplo para listas dependientes te agradecería.

He recreado un ejemplo según tu código. Solo dibujé los combos programados en el evento Initialize y Change.

En el evento Initialize llenas cada combo desde 2 hojas diferentes: items y regional.

Entonces lo que le falta al código de los eventos Change es indicarle la hoja desde donde debe llenar el combo dependiente. Por ej, para el Combobox14 asumo que los datos están en hoja Items también .

Private Sub ComboBox11_Change()
'para que no se ejecute cuando limpio el control
If ComboBox11.ListIndex = -1 Then Exit Sub
ComboBox14.Clear
indice = ComboBox11.ListIndex + 1
'FALTA INDICAR LA HOJA.... X EJ: items
Sheets("items").Select
Cells(2, indice).Select
Do While ActiveCell.Value <> ""
ComboBox14.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Y lo mismo debes indicar para el cmbMarcaCte.

Con respecto a cómo dejar en blanco, utiliza estas instrucciones:

Private Sub CommandButton1_Click()
ComboBox11.ListIndex = -1
ComboBox14.ListIndex = -1
'así con el resto
End Sub

No utilices Empty porque te los vacía y tendrás que volver a llenarlos.... salvo que esa sea tu necesidad.

Como al 'limpiar' los combos se está generando un 'cambio' y por lo tanto se ejecuta el evento Change, es que le agrego la primer línea en esos eventos.

Espero te haya quedado clara la idea. Como verás es lo mismo para cualquier par de controles.

Sdos!

Te recuerdo que la consulta sigue como pendiente ... no olvides valorarla para darla por finalizada.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas