8 combobox dependientes enlazados

Estimados expertos tengo el sigiente problema quiero realizar una macro en donde tenga 8 combobox en los cuales quiero desplegar la siguiente informacion

tengo el sgte codigo

Public ufila As Integer

Private Sub ComboBox1_Change()
ComboBox2.Clear
'Por.dam
codigo = ComboBox1.Value
Dim rnData As Range
Dim vaData As Variant               ' ,la lista, almacenada en una variante
Dim ncData As New VBA.Collection    ' la lista, guardar en una colección
Dim lnCount As Long                 'la cuenta utilizada en el On Error Resume bucle Siguiente
Dim vaItem As Variant               'una variante que representa el tipo de artículos en ncData
'Uso, recuperar el rango de la lista en la columna b.'Uso, Recuperar el Rango de la Lista en La Columna b.
With ThisWorkbook.Worksheets("Hoja1")
Set rnData = .Range(.Range("B1"), .Range("B" & Rows.Count).End(xlUp))
End With
'Coloque los valores de lista en vaData.Coloque los Valores de Lista en vaData
vaData = rnData.Value
'Coloque los valores de lista de vaData en el VBA.Collection.
On Error Resume Next
For lnCount = 1 To UBound(vaData)
ubicacion = Cells(lnCount, 2)
If Cells(lnCount, 1) = codigo Then
ncData.Add vaData(lnCount, 1), CStr(vaData(lnCount, 1))
 End If
 Next lnCount
 On Error GoTo 0
 With Me.ComboBox2
 .Clear
 For Each vaItem In ncData
 .AddItem ncData(vaItem)
 Next vaItem
 End With
End Sub

Private Sub ComboBox2_Change()

'Por.dam
ComboBox3.Clear
codigo = ComboBox1.Value
ubicacion = ComboBox2.Value
Dim rnData As Range
Dim vaData As Variant               'la lista, almacenada en una variante
Dim ncData As New VBA.Collection    'la lista, guardar en una colección
Dim lnCount As Long                 'la cuenta utilizada en el On Error Resume bucle Next.
Dim vaItem As Variant               'una variante que representa el tipo de artículos en ncData
'Usando, recuperar el rango de la lista en la columna b.
With ThisWorkbook.Worksheets("Hoja1")
Set rnData = .Range(.Range("C1"), .Range("C" & Rows.Count).End(xlUp))
End With
'Coloque los valores de lista en vaData.
vaData = rnData.Value
'Coloque los valores de lista de vaData en el VBA.Collection.
On Error Resume Next
For lnCount = 1 To UBound(vaData)
fecha = Cells(lnCount, 3)
If Cells(lnCount, 1) = codigo And _
Cells(lnCount, 2) = ubicacion Then
ncData.Add vaData(lnCount, 1), CStr(vaData(lnCount, 1))
End If
Next lnCount
On Error GoTo 0
With Me.ComboBox3
.Clear
For Each vaItem In ncData
.AddItem ncData(CStr(vaItem))
Next vaItem
End With
End Sub
Private Sub ComboBox3_Change()

'Por.dam
ComboBox4.Clear
codigo = ComboBox1.Value
ubicacion = ComboBox2.Value
fecha = ComboBox3.Value
For i = 1 To ufila
cantidad = Cells(i, 4)
If Cells(i, 1) = codigo And _
Cells(i, 2) = ubicacion And _
Val(Cells(i, 3)) = Val(fecha) Then
With Me.ComboBox4
.AddItem cantidad
End With
End If
Next
End Sub '***

Private Sub UserForm_Activate()

Dim strRango As String
Dim i As Integer
'Por.dam
'El libro de Excel y hojas de cálculo que contiene los datos, así como la gama colocado en que los datos
 Dim rnData As Range
 Dim vaData As Variant               'the list, stored in a variant
 Dim ncData As New VBA.Collection    'the list, stored in a collection
 Dim lnCount As Long                 'the count used in the On Error Resume Next loop.
 Dim vaItem As Variant               'a variant representing the type of items in ncData
 'Instantiate the Excel objects.
 Set wbBook = ThisWorkbook
 Set wsSheet = wbBook.Worksheets("Hoja1")
 ufila = Range("A" & Rows.Count).End(xlUp).Row
 'Using Sheet2,retrieve the range of the list in Column A.
 'With wsSheet
 With ThisWorkbook.Worksheets("Hoja1")
 'Set rnData = .Range(.Range("A2"), .Range("A100").End(xlUp))
 Set rnData = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp))
 End With
 'Place the list values into vaData.
 vaData = rnData.Value
 'Place the list values from vaData into the VBA.Collection.
 On Error Resume Next
 For lnCount = 1 To UBound(vaData)
 ncData.Add vaData(lnCount, 1), CStr(vaData(lnCount, 1))
 Next lnCount
 On Error GoTo 0
 'and then add each unique variant item from ncData to the combo box.
 With Me.ComboBox1
 .Clear
 For Each vaItem In ncData
 .AddItem ncData(vaItem)
 Next vaItem
 End With
 End Sub

Ojala me pudieran orientar como realizarlo en este momento la macro solo me despliega la informacion del primer combo donde despliega la inf. De la unidad...

1 Respuesta

Respuesta
2

Envíame tu archivo para programar los 8 combos, me explicas con un ejemplo: qué pasa cuando selecciono un dato del combo1, qué datos quieres que aparezcan en el 2, y cuando selecciono un dato del 2, dime cuáles deben aparecer en el 3, cuando selecciono del 3 cuáles me aparecen el 4 y así hasta llegar al 8.

Saludos. Dante Amor (DAM)

Esta es la macro para anidar 8 combos.

Private Sub ComboBox1_Change()
'por.Dante Amor
    cargar 2
End Sub
Private Sub ComboBox2_Change()
'por.Dante Amor
    cargar 3
End Sub
Private Sub ComboBox3_Change()
'por.Dante Amor
    cargar 4
End Sub
Private Sub ComboBox4_Change()
'por.Dante Amor
    cargar 5
End Sub
Private Sub ComboBox5_Change()
'por.Dante Amor
    cargar 6
End Sub
Private Sub ComboBox6_Change()
'por.Dante Amor
    cargar 7
End Sub
Private Sub ComboBox7_Change()
'por.Dante Amor
    cargar 8
End Sub
Private Sub UserForm_Activate()
'por.Dante Amor
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, Cells(i, "A")
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
'por.DAM agrega los item únicos y en orden alfabético
    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
Sub cargar(ini)
'Por.DAM
    For i = ini To 8
        Me.Controls("ComboBox" & i) = ""
    Next
    anidar ini - 1
End Sub
Sub anidar(col)
'Por.Dante Amor
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To col
            If Cells(i, j) = Me.Controls("ComboBox" & j) Then igual = True Else igual = False
        Next
        If igual Then agregar Me.Controls("ComboBox" & col + 1), Cells(i, col + 1)
    Next
End Sub

Saludos. Dante Amor

Recuerda valorar la respuesta

dante buenas noches necesito apelar, a tus conocimientos en la macro que tu me hiciste siendo honesto le he agregado un combobox9 en el cual estoy filtrando la información de la columna operación de la hoja1 y necesito copiar esta información a la hoja2 te envie un correo con el archivo trabajado

Con gusto te ayudo, puedes crear una nueva pregunta. En el título puedes poner que es para Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas