Listbox sin duplicados en un userform vba excel

Resuelto
wire less Mensajes publicados 247 Fecha de registro   Estado Miembro Última intervención   -  
f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   -
Buen tema clásico... lo siento, he recorrido los foros pero aún no consigo crear mi listbox sin duplicados!!

Mi script... tengo un combobox1 y deseo que, cuando haga clic en él, llene mi listbox. Mi listbox se llena... ¡sin tener dos veces el mismo elemento!!
Así que hice un:
Private Sub ComboBox1_Click()
Dim Unique As New Collection
Dim Valeur As Range

Unique.Add ComboBox1.Value

For Each Valeur In Unique
Me.ListBox1.AddItem Valeur
Next Valeur

Eso es todo... simplísimo... (bueno, eso es lo que encontré en los foros... no fue mi idea... añado los elementos de mi combobox en una "Colección", (aparentemente las colecciones no aceptan duplicados), luego transfiero mi colección a la listbox.

Y bien... adivinen... no funciona :'-(

¿Alguien tendría una idea o una corrección... o una solución diferente? Gracias.

3 respuestas

  1. VlkPr3s Mensajes publicados 251 Estado Miembro 130
     
    He hecho algo similar a ti para mi aplicación en C# y para evitar duplicados debes probar los elementos de ListBox, en resumen, pruebas el anterior en relación al siguiente y si son diferentes lo dejas dentro, de lo contrario eliminas una de las dos ocurrencias.

    --
    Bien a ti,
    Pr3s.
    0
    1. wire less Mensajes publicados 247 Fecha de registro   Estado Miembro Última intervención   5
       
      Arfff ... Ok ... es solo que con las "colecciones" parecía más simple, pero admito que no sé muy bien cómo se utiliza !!
      Espero un poco más, si nadie tiene una solución, intentaré tu solución de los bucles que prueba cada ocurrencia para ver si son dobles :-/
      0
      1. VlkPr3s Mensajes publicados 251 Estado Miembro 130 > wire less Mensajes publicados 247 Fecha de registro   Estado Miembro Última intervención  
         
        con una loop es suficiente a mi parecer ^^
        0
  2. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717
     
    Hola a los dos,

    Dim Unique As New Collection Dim i As Integer Dim Valeur As Variant Private Sub ComboBox1_Click() On Error Resume Next Unique.Add Item:=ComboBox1.Text, Key:=CStr(ComboBox1.ListIndex) On Error GoTo 0 'raz listbox ListBox1.Clear 'Bucle sobre el contenido de la colección para alimentar la ListBox For Each Valeur In Unique Me.ListBox1.AddItem Valeur Next Valeur End Sub
    0
    1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
       
      Hola f89,

      pequeña observación
      si instancias por "new" y si devuelves el control al sistema al final de la macro (y solo usamos "new"), debes "destruir" el objeto al final de la macro
      set unique= nothing
      Atentamente
      0
      1. f894009 Mensajes publicados 17417 Fecha de registro   Estado Miembro Última intervención   1 717 > michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención  
         
        Hola,
        En efecto, a menudo lo olvido en "pequeños códigos", gracias.
        0
  3. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 772
     
    Hola señores,

    Un ejemplo sin colección, solo un pequeño tratamiento de errores:
    Private Sub ComboBox1_Click() On Error GoTo fin Me.ListBox1 = ComboBox1 If ListBox1.ListIndex = -1 Then GoTo fin Exit Sub fin: Me.ListBox1.AddItem ComboBox1 End Sub


    --
    🎼 Atentamente,
    Franck 🎶
    0