Desplegable en un formulario VBA

A todos/as, estoy haciendo un excel de control de stock y no consigo hacer un desplegable condicionado.

Esto seria lo que necesitaría que estuviera condicionado en un combobox.

A la hora de hacer el código no me diferencia entre la categoría mobiliario y tecnología, es decir, al pulsar mobiliario me sale TODA la columna B igual que si pulso la opción tecnología. Necesitaría ayuda para que cuando se pulse en el combobox1 (llamado generic) solo me saliera los artículos de esa categoría en el combobox2 (llamado especific). Adunto el código que tengo hasta ahora por si alguien sabe como modificarlo.

Private Sub UserForm_Initialize()
generic.Clear
Sheets("hoja2").Select
Range("A1").Select
Do While ActiveCell.Value <> ""
generic.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Private Sub generic_Change()
Dim inventari As String
especific.Clear
Sheets("hoja2").Select
inventari = generic.ListIndex + 1
On Error Resume Next
Cells(inventari, 2).Select
Do While ActiveCell.Value <> ""
especific.AddItem ActiveCell
ActiveCell.Offset(1, 0).Select
Loop
End Sub

1 Respuesta

Respuesta
2

Te anexo el código actualizado

Private Sub UserForm_Initialize()
    generic.Clear
    Set h2 = Sheets("hoja2") 'estableces en el objeto h2 la hoja2,
    For i = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
        If h2.Cells(i, "A").Value <> "" Then
            generic.AddItem h2.Cells(i, "A")
        End If
    Next
End Sub
'
Private Sub generic_Change()
'Por Dante Amor
    especific.Clear
    If generic.Value = "" Or generic.ListIndex = -1 Then
        Exit Sub
    End If
    '
    Set h2 = Sheets("hoja2")
    Set b = h2.Columns("A").Find(generic.Value, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious)
    If Not b Is Nothing Then
        If b.MergeCells Then
            ini = b.MergeArea.Cells(1, 1).Row
            fin = b.MergeArea.Rows.Count + ini - 1
            For i = ini To fin
                especific.AddItem h2.Cells(i, "B")
            Next
        Else
            especific.AddItem h2.Cells(b.Row, "B")
        End If
    End If
End Sub

El código se hace un poco más complejo porque en la columna A los datos los tienes en celdas combinadas. Entonces hay que cargar todos los datos de la columna B que estén en el rango de celdas de la celda combinada de la columna A.


.

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas