No cargar datos en ComboBox si se cumple una condición en Formulario VBA Excel.

Para Dante Amor - Hola Dante. Hace pocos días me ayudaste con esta macro:

  1. Dim h1
    'Por.Dante Amor
    Private Sub ComboBox1_Change()
        Cargar 2
    End Sub
    Private Sub ComboBox2_Change()
        Cargar 3
    End Sub
    Private Sub ComboBox3_Change()
        Cargar 4
    End Sub
    Private Sub ComboBox4_Change()
        Cargar 5
    End Sub
    Private Sub ComboBox5_Change()
        Cargar 6
    End Sub
    Private Sub ComboBox6_Change()
        Cargar 7
    End Sub
    Private Sub ComboBox7_Change()
    End Sub
    '
    Private Sub UserForm_Activate()
    'Act.Por.Dante Amor
        Set h1 = Sheets("Equipo")
        For i = 2 To h1.Range("C" & Rows.Count).End(xlUp).Row
            agregar ComboBox1, h1.Cells(i, "C")
        Next
    End Sub
    '
    Sub Cargar(ini)
    'Por.Dante Amor
        For i = ini To 7
            Me.Controls("ComboBox" & i).Clear
        Next
        For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
            For j = 1 To ini - 1
                If IsNumeric(Me.Controls("ComboBox" & j)) Then
                    dato = Val(Me.Controls("ComboBox" & j))
                Else
                    dato = Me.Controls("ComboBox" & j)
                End If
                '
                If h1.Cells(i, j + 2) = dato Then
                    igual = True
                Else
                    igual = False
                    Exit For
                End If
            Next
            If igual Then agregar Me.Controls("ComboBox" & ini), h1.Cells(i, ini + 2)
        Next
        Me.Controls("ComboBox" & ini).SetFocus
    End Sub
    '
    Sub agregar(cmbBox As ComboBox, sItem As String)
        'Agrega los item únicos y en orden alfabético
        For i = 0 To cmbBox.ListCount - 1
            Select Case StrComp(cmbBox.List(i), sItem, vbTextCompare)
                Case 0: Exit Sub 'ya existe en el combo, no lo agrega
                Case 1: cmbBox.AddItem sItem, i: Exit Sub 'Es menor, lo agrega antes del comparado
            End Select
        Next
        cmbBox.AddItem sItem 'Es mayor lo agrega al final
    End Sub

Esta macro, hace un filtro y carga los valores unicos en los combobox, como bien lo sabes jejeje... Fuiste tu el que la creo.

- Ahora necesito agregarle la forma de que, si se cumple una condición, entonces no me cargue el elemento. Para ello te ilustro con la siguiente imagen:

La idea, es que si el elemento en la Columna J ("Disponible"), dice "SI", entonces el elemento se cargue en los combobox, pero si dice "NO", entonces, ese elemento, no se cargue.

1 respuesta

Respuesta
2

H o l a:

Te anexo el código actualizado

Dim h1
'Por.Dante Amor
Private Sub ComboBox1_Change()
    cargar 2
End Sub
Private Sub ComboBox2_Change()
    cargar 3
End Sub
Private Sub ComboBox3_Change()
    cargar 4
End Sub
Private Sub ComboBox4_Change()
    cargar 5
End Sub
Private Sub ComboBox5_Change()
    cargar 6
End Sub
Private Sub ComboBox6_Change()
    cargar 7
End Sub
Private Sub ComboBox7_Change()
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("Equipo")
    cargar 1
End Sub
'
Sub cargar(ini)
'Por.Dante Amor
    For i = ini To 7
        Me.Controls("ComboBox" & i).Clear
    Next
    For i = 2 To h1.Cells(Rows.Count, "C").End(xlUp).Row
        If UCase(h1.Cells(i, "J")) = "SI" Then
            k = 3
            If ini = 1 Then igual = True
            For j = 1 To ini - 1
                '
                If h1.Cells(i, k) = ValidaNum(Me.Controls("ComboBox" & j)) Then
                    igual = True
                Else
                    igual = False
                    Exit For
                End If
                k = k + 1
            Next
            If igual Then agregar Me.Controls("ComboBox" & ini), h1.Cells(i, ini + 2)
        End If
    Next
    Me.Controls("ComboBox" & ini).SetFocus
End Sub
'
Sub agregar(cmbBox As ComboBox, sItem As String)
'Agrega los item únicos y en orden alfabético
    For i = 0 To cmbBox.ListCount - 1
        Select Case StrComp(cmbBox.List(i), sItem, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo, no lo agrega
            Case 1: cmbBox.AddItem sItem, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    cmbBox.AddItem sItem 'Es mayor lo agrega al final
End Sub
'
Function ValidaNum(DatoCombo)
'Por.Dante Amor
    If IsNumeric(DatoCombo) Then
        ValidaNum = Val(DatoCombo)
    Else
        ValidaNum = DatoCombo
    End If
End Function
Private Sub CmdCancelar_Click()
    End
End Sub

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas