Cbox que se carguen desde tablas, Box dependientes de los otros

Tengo el formulario, que me tiene 3 combobox

El primero Elije la sección u Oficina
El segundo elije el cargo
El tercero elije el Nombre

Cómo hago para que sean dependientes, es decir que si elijo oficina 1, los
otros Combox me muestres cargos solo de sección 1, y en el combobox nombre,
me muestre sólo los nombres que correspondan a los cargos y sección

Respuesta
3

Te anexo un código para 3 combos, al seleccionar el tercer combo, te pone un dato en un textbox

Dim h1
'
Private Sub ComboBox1_Change()
    cargar 2
End Sub
'
Private Sub ComboBox2_Change()
    cargar 3
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("Base de datos")
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h1.Cells(i, "A")
    Next
End Sub
'Miguel Ángel Razquin Noblecilla
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
            Case 1: combo.AddItem dato, i: Exit Sub
        End Select
    Next
    combo.AddItem dato
End Sub
'
Sub cargar(ini)
'Por.Dante Amor
    For i = ini To 3
        Controls("ComboBox" & i).Clear
    Next
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To ini - 1
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j))
            If h1.Cells(i, j) = valor Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
        If igual Then agregar Controls("ComboBox" & ini), h1.Cells(i, ini)
    Next
End Sub
Private Sub ComboBox3_Change()
'Por.Dante Amor
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To 3
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j))
            If Cells(i, j) = valor Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
        If igual Then Exit For
    Next
    If igual Then TextBox1 = Cells(i, j)
End Sub

Revisa y si gustas te ayudo adaptarlo a tus datos.

2 respuestas más de otros expertos

Respuesta
2

Prueba esta macro, las imágenes son el resultado de la misma

y esta es la base de datos 

para usarse con esta macro

Private Sub ComboBox2_Change()
Set CARGOS = Range("CARGO")
With DATOS
    INDICE = ComboBox2.ListIndex + 1
    ComboBox3.AddItem CARGOS.Cells(INDICE, 3)
    ComboBox3.ListIndex = 0
End With
End Sub
Private Sub ComboBox1_Change()
Set OFICINAS = Range("OFICINA")
With ComboBox1
    OFICINA = .Value
    CUENTA = WorksheetFunction.CountIf(OFICINAS.Columns(1), OFICINA)
    FILA = WorksheetFunction.Match(OFICINA, OFICINAS.Columns(1), 0)
    Set CARGOS = OFICINAS.Rows(FILA).Resize(CUENTA, 1)
    CARGOS.Name = "CARGO"
    ComboBox2.RowSource = CARGOS.Columns(2).Address
    ComboBox2.ListIndex = 0
End With
End Sub
Private Sub UserForm_Initialize()
Dim UNICOS As New Collection
Set DATOS = Range("A1").CurrentRegion
With DATOS
    .Sort _
    KEY1:=Range(.Columns(1).Address), ORDER1:=xlAscending, _
    KEY2:=Range(.Columns(2).Address), ORDER1:=xlAscending, _
    KEY3:=Range(.Columns(3).Address), ORDER1:=xlAscending, Header:=xlYes
    F = .Rows.Count: C = .Columns.Count
    For I = 2 To F
        OFICINA = .Cells(I, 1)
        On Error Resume Next
            UNICOS.Add OFICINA, CStr(OFICINA)
        On Error GoTo 0
    Next I
    For J = 1 To UNICOS.Count
        OFICINA = UNICOS.Item(J)
        ComboBox1.AddItem OFICINA
    Next J
    .Name = "OFICINA"
    Set DATOS = Nothing
End With
ComboBox1.ListIndex = 0
End Sub
Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas