Como limpiar los valores de un ComboBox3 sin salir del formulario, cuyos valores están restringidos a los valores elegidos en lo

Tengo tres ComboBox de los cuales quiero que si al elegir determinados valores en los Combo1 y Combo2, sólo se puedan elegir determinados valores del Combo. Pero resulta que sin salir del formulario, si vuelvo a registrar los datos de los combos 1 y 2 se me queda los valores anteriores, es decir que el Combo3 no se limpia, dando la opción de elegir un valor que no está previsto que el usuario pueda elegir.

ComboBox1       valores= 1 a 5

ComboBox2       valores= 50, 250, 500, 750, 1000

ComboBox3       valores= 1 a 5

Lo he intentado poniendo ComboBox3 = "", tanto en el change o al hacer click en los otros dos combos, pero no me limpia.

El código que he utilizado es el siguiente:

Private Sub UserForm_Initialize()
With ComboBox1
. AddItem "1"
. AddItem "2"
. AddItem "3"
. AddItem "4"
. AddItem "5"
End With
With ComboBox2
. AddItem "50"
. AddItem "250"
. AddItem "500"
. AddItem "750"
. AddItem "1000"
End With
End Sub
Private Sub ComboBox1_change()
ComboBox2 = ""
ComboBox3 = ""
End Sub
Private Sub ComboBox2_Change()
ComboBox3 = ""
resultado = ComboBox1 & "-" & ComboBox2
If resultado = "1-50" Then
With ComboBox3
.AddItem "1"
End With
ElseIf resultado = "2-50" Then
With ComboBox3
.AddItem "1"
End With
ElseIf resultado = "3-50" Then
With ComboBox3
.AddItem "1"
End With
ElseIf resultado = "4-50" Then
With ComboBox3
.AddItem "1"
.AddItem "2"
End With
ElseIf resultado = "5-50" Then
With ComboBox3
.AddItem "1"
.AddItem "2"
End With
ElseIf resultado = "1-250" Then
With ComboBox3
.AddItem "2"
End With
ElseIf resultado = "2-250" Then
With ComboBox3
.AddItem "2"
End With
ElseIf resultado = "3-250" Then
With ComboBox3
.AddItem "2"
End With
ElseIf resultado = "4-250" Then
With ComboBox3
.AddItem "2"
.AddItem "3"
End With
ElseIf resultado = "5-250" Then
With ComboBox3
.AddItem "2"
.AddItem "3"
End With
ElseIf resultado = "1-500" Then
With ComboBox3
.AddItem "3"
End With
ElseIf resultado = "2-500" Then
With ComboBox3
.AddItem "3"
End With
ElseIf resultado = "3-500" Then
With ComboBox3
.AddItem "3"
End With
ElseIf resultado = "4-500" Then
With ComboBox3
.AddItem "3"
.AddItem "4"
End With
ElseIf resultado = "5-500" Then
With ComboBox3
.AddItem "3"
.AddItem "4"
End With
ElseIf resultado = "1-750" Then
With ComboBox3
.AddItem "4"
End With
ElseIf resultado = "2-750" Then
With ComboBox3
.AddItem "4"
End With
ElseIf resultado = "3-750" Then
With ComboBox3
.AddItem "4"
End With
ElseIf resultado = "4-750" Then
With ComboBox3
.AddItem "4"
.AddItem "5"
End With
ElseIf resultado = "5-750" Then
With ComboBox3
.AddItem "4"
.AddItem "5"
End With
ElseIf resultado = "1-1000" Then
With ComboBox3
.AddItem "5"
End With
ElseIf resultado = "2-1000" Then
With ComboBox3
.AddItem "5"
End With
ElseIf resultado = "3-1000" Then
With ComboBox3
.AddItem "5"
End With
ElseIf resultado = "4-1000" Then
With ComboBox3
.AddItem "5"
End With
ElseIf resultado = "5-1000" Then
With ComboBox3
.AddItem "5"
End With
End If
End Sub

1 Respuesta

Respuesta
2

Tienes que agregar la instrucción Clear

Simplifiqué un poco el código con la instrucción Select Case

Private Sub UserForm_Initialize()
    With ComboBox1
    . AddItem "1"
    . AddItem "2"
    . AddItem "3"
    . AddItem "4"
    . AddItem "5"
    End With
    With ComboBox2
    . AddItem "50"
    . AddItem "250"
    . AddItem "500"
    . AddItem "750"
    . AddItem "1000"
    End With
    End Sub
Private Sub ComboBox1_change()
    ComboBox2 = ""
    ComboBox3 = ""
    ComboBox3.Clear
End Sub
Private Sub ComboBox2_Change()
    ComboBox3 = ""
    ComboBox3.Clear
    resultado = ComboBox1 & "-" & ComboBox2
    Select Case resultado
        Case "1-50"
            ComboBox3.AddItem "1"
        Case "2-50"
            ComboBox3.AddItem "1"
        Case "3-50"
            ComboBox3.AddItem "1"
        Case "4-50"
            ComboBox3. AddItem "1"
            ComboBox3.AddItem "2"
        Case "5-50"
            ComboBox3.AddItem "1"
            ComboBox3.AddItem "2"
        Case "1-250"
            ComboBox3.AddItem "2"
        Case "2-250"
            ComboBox3.AddItem "2"
        Case "3-250"
            ComboBox3.AddItem "2"
        Case "4-250"
            ComboBox3. AddItem "2"
            ComboBox3.AddItem "3"
        Case "5-250"
            ComboBox3.AddItem "2"
            ComboBox3.AddItem "3"
        Case "1-500"
            ComboBox3.AddItem "3"
        Case "2-500"
            ComboBox3.AddItem "3"
        Case "3-500"
            ComboBox3.AddItem "3"
        Case "4-500"
            ComboBox3. AddItem "3"
            ComboBox3.AddItem "4"
        Case "5-500"
            ComboBox3.AddItem "3"
            ComboBox3.AddItem "4"
        Case "1-750"
            ComboBox3.AddItem "4"
        Case "2-750"
            ComboBox3.AddItem "4"
        Case "3-750"
            ComboBox3.AddItem "4"
        Case "4-750"
            ComboBox3. AddItem "4"
            ComboBox3.AddItem "5"
        Case "5-750"
            ComboBox3.AddItem "4"
            ComboBox3.AddItem "5"
        Case "1-1000"
            ComboBox3.AddItem "5"
        Case "2-1000"
            ComboBox3.AddItem "5"
        Case "3-1000"
            ComboBox3.AddItem "5"
        Case "4-1000"
            ComboBox3.AddItem "5"
        Case "5-1000"
            ComboBox3.AddItem "5"
    End Select
End Sub

Y todavía puedes simplificarlo un poco más, por ejemplo, puedes cambiar esta parte:

        Case "1-50"
            ComboBox3.AddItem "1"
        Case "2-50"
            ComboBox3.AddItem "1"
        Case "3-50"
            ComboBox3.AddItem "1"
        Case "4-50"
            ComboBox3. AddItem "1"
            ComboBox3.AddItem "2"
        Case "5-50"
            ComboBox3.AddItem "1"
            ComboBox3.AddItem "2"

Por esto:

        Case "1-50", "2-50", "3-50"
            ComboBox3.AddItem "1"
        Case "4-50", "5-50"
            ComboBox3. AddItem "1"
            ComboBox3. AddItem "2"

Pero ya decides si quieres cada resultado en una línea o varios resultados en una línea.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Quedaría simplificado así el evento change del combobox2

Private Sub ComboBox2_Change()
    With ComboBox3
        .Value = ""
        .Clear
        Select Case ComboBox1 & "-" & ComboBox2
            Case "1-50", "2-50", "3-50"
                .AddItem "1"
            Case "4-50", "5-50"
                .AddItem "1"
                .AddItem "2"
            '
            Case "1-250", "2-250", "3-250"
                .AddItem "2"
            Case "4-250", "5-250"
                .AddItem "2"
                .AddItem "3"
            '
            Case "1-500", "2-500", "3-500"
                .AddItem "3"
            Case "4-500", "5-500"
                .AddItem "3"
                .AddItem "4"
            '
            Case "1-750", "2-750", "3-750"
                .AddItem "4"
            Case "4-750", "5-750"
                .AddItem "4"
                .AddItem "5"
            '
            Case "1-1000", "2-1000", "3-1000", "4-1000", "5-1000"
                .AddItem "5"
        End Select
    End With
End Sub

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

¡Gracias Dante Amor¡,  es genial lo que explicas y cómo hacerlo más corto, y por tanto más sencillo. Me tomo nota para mi proyecto y casos similares que tenga. Un saludo y que pases unas felices fiestas de navidad en estas fechas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas