Userform combobox dependiente?

Amigo mio, hace pocos días me entregaste una respuesta barbara.

Te quiero comentar que el ejemplo que le mostré era para luego yo aplicar en un macro mas grande en la que estoy trabajando.

Tengo un pequeño dilema con esto, dado al ejemplo que te menciones no tenían el orden real de las columnas, es decir si en el ejemplo de te mencione que :
Columna A = CÓDIGO PRODUCTO

Columna B = UBICACIÓN PRODUCTO

Columna C = FECHA

Columna D = CANTIDAD

En realidad el orden es similar pero no igual, este es el verdadero orden de la Macro que estoy trabajando;

Columna A = CÓDIGO PRODUCTO
Columna C = UBICACIÓN PRODUCTO
Columna G = FECHA
Columna F = CANTIDAD

Las columnas B - D - E SON DATOS, B=descrpcion del producto, D y E son los ingresos y egresos.

He tratado un montón de veces de adaptar el código a las columnas, pero no me resulta, pienso que puede ser por no ser columnas continuas como en el ejemplo.

Este es el código que me enviaste y funciono muy bien pero como le comente en primera instancia, me funciono solo en la tabla de ejemplo, lo trato de adaptar a las verdaderas columnas y no me funciona, a las columnnas A-C-G-F, me puedes ayudar por fa', también decirme en una frase porque no me puede funcionar, sospecho que puede ser porque las columnas no están continuas, dado que trate de adaptar las columnas al numero que corresponde pero no me funciono.

Public ufila As Integer Private Sub ComboBox1_Change()
ComboBox2.Clear 'Por.dam codigo = ComboBox1.Value 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 'Using ,retrieve the range of the list in Column b. With ThisWorkbook.Worksheets("Hoja1") Set rnData = .Range(.Range("B1"), .Range("B" & 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) 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 '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 'Using ,retrieve the range of the list in Column b. With ThisWorkbook.Worksheets("Hoja1") Set rnData = .Range(.Range("C1"), .Range("C" & 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) 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 'The Excel workbook and worksheets that contain the data, as well as the range placed on that data 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 Private Sub SALIR_Click() Unload Me End Sub

1 Respuesta

Respuesta
1

En cuanto tenga tiempo te mando los cambios.

Pero si quieres experimentar, tienes que modificar estas líneas

cantidad = Cells(i, 4)
If Cells(i, 1) = código And _
Cells(i, 2) = ubicación And _
Val(Cells(i, 3)) = Val(fecha) Then

donde 1 es la columna A

2 es B

3 es C

4 es D

Saludos. Dam

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas