Como arreglo Combobox excel procedimiento largo

Estoy haciendo un userform con macro en excel con visual basic y estoy haciendo que cuando el usuario seleccione una medida aparezca un combobox y desaparezcan los otros y así sucesivamente pero ahora me da error pone que el procedimiento es demasiado largo y necesito cambiarle el nombre al combobox para seguir añadiendo casos pero si le cambio el nombre ya no funcionan los otros casos les dejo un ejemplo del código a ver como lo puedo arreglar. Muchas gracias.

Private Sub ComboBox8_Change()
Select Case ComboBox8
Case "12x6´"
ComboBox5.Visible = True
ComboBox10.Visible = False
ComboBox11.Visible = False
ComboBox12.Visible = False
ComboBox13.Visible = False
ComboBox14.Visible = False
ComboBox15.Visible = False
ComboBox16.Visible = False
ComboBox17.Visible = False
ComboBox18.Visible = False
ComboBox19.Visible = False
ComboBox20.Visible = False
ComboBox21.Visible = False
ComboBox22.Visible = False
ComboBox23.Visible = False
ComboBox24.Visible = False
ComboBox25.Visible = False
ComboBox26.Visible = False
ComboBox27.Visible = False
ComboBox28.Visible = False
ComboBox29.Visible = False
ComboBox30.Visible = False
ComboBox31.Visible = False
ComboBox32.Visible = False
ComboBox33.Visible = False
ComboBox34.Visible = False
ComboBox35.Visible = False
ComboBox36.Visible = False
ComboBox37.Visible = False
ComboBox38.Visible = False
ComboBox39.Visible = False
ComboBox40.Visible = False
ComboBox41.Visible = False
ComboBox42.Visible = False
ComboBox43.Visible = False
ComboBox44.Visible = False
ComboBox45.Visible = False
ComboBox46.Visible = False
ComboBox47.Visible = False
ComboBox48.Visible = False
ComboBox49.Visible = False
ComboBox50.Visible = False
ComboBox51.Visible = False
ComboBox52.Visible = False
ComboBox53.Visible = False
ComboBox54.Visible = False
ComboBox55.Visible = False
ComboBox56.Visible = False
ComboBox58.Visible = False
ComboBox59.Visible = False
ComboBox60.Visible = False
ComboBox61.Visible = False
ComboBox62.Visible = False
ComboBox63.Visible = False
ComboBox64.Visible = False
ComboBox65.Visible = False
ComboBox66.Visible = False
ComboBox67.Visible = False
ComboBox68.Visible = False
ComboBox69.Visible = False
Case "12x7´"
ComboBox5.Visible = False
ComboBox10.Visible = True
ComboBox11.Visible = False
ComboBox12.Visible = False
ComboBox13.Visible = False
ComboBox14.Visible = False
ComboBox15.Visible = False
ComboBox16.Visible = False
ComboBox17.Visible = False
ComboBox18.Visible = False
ComboBox19.Visible = False
ComboBox20.Visible = False
ComboBox21.Visible = False

Respuesta
3

Si tus controles se encuentran desordenados o no correlativos, podrías utilizar este otro código. Lo que hace es evaluar si se trata de un control ComboBox y en cada caso evaluará su nombre para dejar visible solo el que corresponda al Case.

Private Sub ComboBox8_Change() 
Select Case ComboBox8.Text
Case "12x6'"
    'llama a una macro común indicando el nombre del control que debe quedar visible
    Call ocultaCt("ComboBox5")
Case "12x7'"
    Call ocultaCt("ComboBox10")
'agregar todos los Case
End Select
End Sub
Sub ocultaCt(miCombo)
'recorre todos los controles
For Each ct In Me.Controls
    'si se trata de un ComboBox y no es el Combo8, evaluaré su nombre
    If TypeName(ct) = "ComboBox" And ct.Name <> "ComboBox8" Then
    'Si corresponde a 'miCombo' lo hará visible y el resto se oculta para este caso
        If ct.Name = miCombo Then
            ct.Visible = True
        Else
            ct.Visible = False
        End If
    End If
Next ct
End Sub

Debes completar todos los Case y copiar allí mismo la segunda macro (ocultaCt) que es común a todos.

Otros ejemplos de macros compartidas en el video N° 9 de mi canal.

Muchas gracias y sabes como hacer 3 combobox relacionados entre si es decir cuando en el combobox1 se seleccione 12x6 y en el combobox2 se seleccione 6x6 en el combobox3 se ponga 2-12.Muchas gracias por todo

Sí se cómo hacer ;) pero necesito más información para darte la respuesta precisa.

En el video N° 7 de mi canal encontrarás unos ejemplos de Listas dependientes (con libro para descargar desde el blog)

En esos ejemplos, cada lista es dependiente de la anterior. Se guardan en rangos los posibles valores para cada control ComboBox (o también ListBox).

Entiendo que en tu caso solo el tercero es dependiente de los 2 anteriores. Si es así debieras dejarme una imagen de la ubicación de las listas y qué valores debe asumirse en la 3ra según los 2 combos anteriores.

O si te parece, me envías tu libro a alguno de mis correos (se encuentran en sitio que dejo al pie).

Sdos.

http://aplicaexcel.com/contactos

1 respuesta más de otro experto

Respuesta
2

[hola 

Si los nombres de los combox son correlativos 

Private Sub ComboBox8_Change()
Dim i As Long
Select Case ComboBox8.Text
Case "12x6´"
ComboBox5.Visible = True
    For i = 10 To 50
        Me.Controls("ComboBox" & i).Visible = False
    Next i
Case "12x7´"
ComboBox5.Visible = False
ComboBox10.Visible = True
 For i = 11 To 21
        Me.Controls("ComboBox" & i).Visible = False
    Next i
End Select
End Sub
Private Sub UserForm_Activate()
ComboBox8.List = Array("12x6´", "12x7´")
End Sub

Muchas gracias.Me lo podrías explicar por favor el código, es que soy nuevo en Excel y me gustaría saber. Gracias

Private Sub ComboBox8_Change()
Dim i As Long
Select Case ComboBox8.Text
Case "12x6´"
ComboBox5.Visible = True
'recorre los combox del 10 al 69,(ComboBox10,ComboBox11,...)puedes cambiar si son más de 69.
    For i = 10 To 69
        Me.Controls("ComboBox" & i).Visible = False ' oculta los combox
    Next i
Case "12x7´"
ComboBox5.Visible = False
ComboBox10.Visible = True
'recorre los combox del 11 al 21,(ComboBox11,ComboBox12,...)puedes cambiar si son más de 69.
 For i = 11 To 21
        Me.Controls("ComboBox" & i).Visible = False ' oculta los combox
    Next i
End Select
End Sub
Private Sub UserForm_Activate()
'carga los valores en el ComboBox8 al ejecutar el formulario
ComboBox8.List = Array("12x6´", "12x7´")
End Sub

Me dice cuando lo ejecuto se ha producido el error 42 en tiempo de ejecución se requiere un objeto en la línea

ComboBox8.List = Array("12x6´", "12x7´")

Vale ya lo he solucionado pero ahora me da error -2147024809

En esta línea

Me.Controls("ComboBox" & i).Visible = False ' oculta los combox

Asegúrate que los nombres de los combox sean existentes, si va del 1 al 10, no debe faltar ninguna

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas