[VBA] Propiedad ComboBox

Resuelto
Palteza Mensajes publicados 82 Estado Miembro -  
Palteza Mensajes publicados 82 Estado Miembro -
Hola a todos,

Busco desesperadamente una propiedad de un ComboBox (que quizá ni exista).

Tengo en un Combo una primera lista desplegable de 3 opciones. Cada una de estas opciones implica una nueva lista desplegable que se va a cargar.
Me gustaría que, cuando se haga clic en una de las 3 opciones de la primera lista, la segunda lista se despliegue automáticamente ante los ojos del usuario (y no que tenga que hacer clic de nuevo para ver que aparezca la segunda lista).

¿Existe tal propiedad en un Combo?

Gracias de antemano

Configuración: Windows XP / Internet Explorer 8.0

11 respuestas

  1. Palteza Mensajes publicados 82 Estado Miembro 3
     
    Voy a remontar.
    0
  2. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    No, no es posible naturalmente, pero puedes
    Ver este truco para obtenerlo.
    Nos vemos
    La experiencia enseña más seguro que el consejo. (André Gide)
    Si te golpeas con una olla y suena hueca, no siempre es la olla la que está vacía. ;-) (Confucio)
    0
  3. Palteza Mensajes publicados 82 Estado Miembro 3
     
    Hola lermitte y gracias por la respuesta,

    En realidad, al indicarte este truco, debiste entender que se trataba de 2 combos, pero seguro que es uno (cuando elijo uno de los 3 modos de corte, entonces ese mismo combo se carga con nuevos valores). Te pego el código, así lo entenderás mejor. Y entonces supongo que basta con colocar la función DropDown en algún lugar de la macro, pero no encuentro dónde:

    Option Explicit Private Sub ComboBox1_Change() Dim Plage As Range Dim choix As String Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_2006.xls") Select Case ComboBox1.Value Case Is = "Découpages INSEE" ComboBox1.Clear With xlBook.Sheets("Données") Set Plage = .Range("B1:B29") End With ComboBox1.List = Plage.Value Case Is = "Découpages Conseil de Quartier" ComboBox1.Clear With xlBook.Sheets("Données") Set Plage = .Range("B31:B42") End With ComboBox1.List = Plage.Value Case Is = "Découpages Mérignac/CUB/Gironde" ComboBox1.Clear With xlBook.Sheets("Données") Set Plage = .Range("B44:B48") End With ComboBox1.List = Plage.Value Case Is = "Retour" ComboBox1.Clear With xlBook.Sheets("Données") Set Plage = .Range("A1:A3") End With ComboBox1.List = Plage.Value End Select choixcombo1 = ComboBox1.Value End Sub
    0
  4. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Hola,
    en primer lugar pones demasiadas líneas de código para hacer lo que quieres..
    Select Case ComboBox1.Value Case Is = "Découpages INSEE" ComboBox1.Clear With xlBook.Sheets("Données") Set Plage = .Range("B1:B29") End With ComboBox1.List = Plage.Value Case Is .....


    sería acertadamente reemplazado por...

     With xlBook.Sheets("Données") Select Case ComboBox1.Value Case Is = "Découpages INSEE" ComboBox1.RowSource = .Range("B1:B29") Case Is .....


    Y efectivamente, el código debería indicar estar justo antes del End Sub

    No he probado, si hay problema, me dices y ya lo vemos más adelante.
    Observación: Cuando recibes una modificación en el Combo1 es el Combo1 el que modificas... ¿Es correcto??
    A+
    La experiencia instruye más seguramente que el consejo. (André Gide)
    Si te golpeas con una olla y suena hueca, no necesariamente es la olla la vacía. ;-)(Confucio)
    0
  5. Palteza Mensajes publicados 82 Estado Miembro 3
     
    Sí, es exactamente así: "Cuando recibes una modificación en el Combo1 es el Combo1 que modificas"

    Al reemplazar mi código por RowSource (que efectivamente aligeraría las cosas), me aparece una "incompatibilidad de tipo" en la línea

    ComboBox1.RowSource = .Range("B1:B29")

    Luego, ComboBox1.DropDown tampoco funciona justo antes del End Sub
    0
  6. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Can you put the code you have in the combo event?
    --
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  7. Palteza Mensajes publicados 82 Estado Miembro 3
     
    Option Explicit Private Sub ComboBox1_Change() Dim Plage As Range Dim choix As String Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_" & Annee & ".xls") With xlBook.Sheets("Données") Select Case ComboBox1.Value Case Is = "Découpages INSEE" ComboBox1.RowSource = .Range("B1:B29") Case Is = "Découpages Conseil de Quartier" ComboBox1.RowSource = .Range("B31:B42") Case Is = "Découpages Mérignac/CUB/Gironde" ComboBox1.RowSource = .Range("B44:B48") Case Is = "Retour" ComboBox1.RowSource = .Range("A1:A3") End Select End With choixcombo1 = ComboBox1.Value ComboBox1.DropDown End Sub

    Private Sub UserForm_Initialize() Dim Plage As Range Set xlBook = Workbooks("10CQ_MERIGNAC_INSEE_" & Annee & ".xls") With xlBook.Sheets("Données") Set Plage = .Range("A1:A3") End With ComboBox1.List = Plage.Value ComboBox2.List = Plage.Value End Sub
    0
  8. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Me equivoqué en el acortamiento...
     With xlBook.Sheets("Données") Select Case ComboBox1.Value Case Is = "Découpages INSEE" ComboBox1.List= .Range("B1:B29").value Case Is .....


    En lo que respecta a la apertura del combo, no funciona si quieres volver a abrir el mismo combo.
    Me parece igual de extraño que sea ese el que reinicias.
    Y en tu selección de las "Case Is" pones 4 mientras que solo tienes 3 datos
    Otra observación: ¿pones los mismos datos en Combo1 y 2 ?
    A+
    --
    La experiencia instruye más seguramente que el consejo. (André Gide)
    Si te golpeas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    0
  9. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    Al contrario de lo que digo en mi publicación anterior, funciona normalmente incluso si volvemos a abrir el mismo Combo, me has inducido a error con tu pregunta Dónde voy a colocar el código cuando está totalmente claro en el tutorial.
    No me impide pensar que programas de forma divertida.
    Nos vemos
    --
    La experiencia enseña con más certeza que el consejo. (André Gide)
    Si te tropiezas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucio)
    0
  10. Palteza Mensajes publicados 82 Estado Miembro 3
     
    Es sobre todo que programo casi en autodidacta, así que las estructuras deben ser pesadas, ¡sí!

    De hecho, mis combinaciones 1 y 2 son idénticas (porque el usuario debe realizar 2 elecciones), por eso los cambios efectuados en cada combo provocan cambios en el mismo.

    Para la historia del Case Is 4 (Case Is Return), es que en cada 2ª serie de datos (después de haber hecho una de las 3 elecciones), al final de la lista hay un "Return" (Regresar), para poder volver a la elección inicial de las 3.

    En esta historia, ¿no tienes ideas o dónde colocar este DropDown (aunque se vea en mi código más arriba, no funciona)? ¿Porque el tutorial no es adaptable a mi caso?
    0
  11. lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
     
    No de una pipa, ¡es que hay que explicarlo de todos modos!
    Bueno, voy a desarrollarlo de todas formas..
    Añade el código siguiente al FINAL DE TU código
     Private Sub ComboBox1_Change() .... .... choixcombo1 = ComboBox1.Value ComboBox1.SetFocus SendKeys "^(F4)" End Sub

    Luego debajo del End Sub añade...
    Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 16 Then ComboBox1.DropDown End If End Sub

    Espero que esta vez quede más claro. :D
    A+
    --
    La experiencia instruye con más seguridad que el consejo. (André Gide)
    Si te golpeas con una olla y suena hueca, no necesariamente es la olla la que está vacía. ;-)(Confucius)
    0
    1. Palteza Mensajes publicados 82 Estado Miembro 3
       
      Sí, confieso que ahí me pasé un poco de tu buena voluntad ^^' ... había olvidado incorporar SetFocus y SendKeys en el Change ...

      Gracias por todo, lermita :)
      0