Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1808to1812
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Doppelte Combobox Einträge verhindern

Doppelte Combobox Einträge verhindern
29.01.2021 14:48:57
Jürgen
Hallo liebes Forum!
Auf meiner Form befindet sich eine Combobox und eine Listbox.
Die Combobox dient dazu um die Werte der Listbox zu filtern.
folgendermaßen werden die Daten von der Excel Tabelle in die Listbox eingetragen:

Public b As Boolean
Private Sub LBladen()
Dim lngZeile As Long
ListBox1.Clear
With Worksheets("daten")
For lngZeile = 4 To .Cells(Rows.Count, 6).End(xlUp).Row
If .Rows(lngZeile).Hidden = False Then
ListBox1.AddItem .Cells(lngZeile, 1)
End If
Next lngZeile
End With
End Sub

Die Combobox wird so befüllt:
Private Sub UserForm_Initialize()
Call LBladen
Worksheets("daten").Range("a3:h3").AutoFilter
Worksheets("daten").Range("a3:h3").AutoFilter
With Worksheets("daten").AutoFilter.Range
ComboBox2.RowSource = "g4:g" & .Rows.Count + .Row - 1
End With
End With

Sind aber nun mehrere gleiche Einträge werden diese natürlich auch alle in die Combobox kopiert.
Wie kann ich doppelte Einträge in der Combobox verhindern?
Lg und vielen Dank im Vorraus Jürgen

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Combobox Einträge verhindern
29.01.2021 17:39:47
Oberschlumpf
Hi Jürgen,
eine Möglichkeit...
1. Übertrage per Spezialfilter und den Optionen "Kopieren" + "ohne Dublikate" (die Optionen können etwas anders heißen, ich schreib nur aus meiner Erinnerung) erst mal alle gefilterten Daten für die ComboBox in einen anderen, nicht genutzen Bereich des selben Tabellenblatts, in dem auch die gefilterten Daten stehen
2. Schon jetzt solltest du im "neuen Bereich" nur 1x vorkommende Einträge sehen
3. Mit For/Next könntest du nun die einmaligen Einträge in die ComboBox übertragen
4. Lösch nun den Bereich in der Tabelle wieder bis zum nächsten Mal
Hilfts?
Ciao
Thorsten
Anzeige
AW: Doppelte Combobox Einträge verhindern
29.01.2021 17:46:15
Nepumuk
Hallo Jürgen,
teste mal:
Private Sub UserForm_Initialize()
    
    Dim avntValues As Variant, vntItem As Variant
    Dim objDictionary As Object
    
    Call LBladen
    
    With Worksheets("daten")
        
        avntValues = .Range(.Cells(4, 7), .Cells(.Rows.Count, 7).End(xlUp)).Value
        
    End With
    
    Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
    
    For Each vntItem In avntValues
        
        objDictionary.Item(Key:=vntItem) = vbNullString
        
    Next
    
    ComboBox2.List = objDictionary.Keys
    
    Set objDictionary = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Doppelte Combobox Einträge verhindern
29.01.2021 19:52:00
Jürgen
Hi Nepumuk.
Dank dir, das funktioniert!
Wenn ich nun neue Daten eintrage, wie kann ich die Combobox aktualisieren? Muss ich den gesamten code wieder ausführen?
AW: Doppelte Combobox Einträge verhindern
29.01.2021 19:55:01
Nepumuk
Hallo Jürgen,
ja, aber das geht so schnell das es keine Rolle spielt.
Gruß
Nepumuk
AW: Doppelte Combobox Einträge verhindern
29.01.2021 19:57:27
Jürgen
ok, danke.
Und wie muss ich den Code umbauen wenn ich 2 Comboboxen zu befüllen habe?
Combobox2 wie gehabt mit Spalte 7
Combobox1 mit Spalte 1
Dank dir vielmals für deine Hilfe
Lg Jürgen
AW: Doppelte Combobox Einträge verhindern
29.01.2021 20:04:15
Nepumuk
Hallo Jürgen,
so:
Private Sub UserForm_Initialize()
    
    Dim avntValues As Variant, vntItem As Variant
    Dim objDictionary As Object
    
    Call LBladen
    
    Set objDictionary = CreateObject(Class:="Scripting.Dictionary")
    
    With Worksheets("daten")
        
        avntValues = .Range(.Cells(4, 7), .Cells(.Rows.Count, 7).End(xlUp)).Value
        
    End With
    
    For Each vntItem In avntValues
        
        objDictionary.Item(Key:=vntItem) = vbNullString
        
    Next
    
    ComboBox2.List = objDictionary.Keys
    
    Call objDictionary.RemoveAll
    
    With Worksheets("daten")
        
        avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
        
    End With
    
    For Each vntItem In avntValues
        
        objDictionary.Item(Key:=vntItem) = vbNullString
        
    Next
    
    ComboBox1.List = objDictionary.Keys
    
    Set objDictionary = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Doppelte Combobox Einträge verhindern
29.01.2021 20:30:19
Jürgen
Hi nochmal.
Ich hab das jetzt auf 3 Comboboxen erweitert
Dim avntValues As Variant, vntItem As Variant
Dim objDictionary As Object
Call LBladen
Set objDictionary = CreateObject(Class:="Scripting.Dictionary") 'combobox Jahr laden Anfang
With Worksheets("daten")
avntValues = .Range(.Cells(4, 7), .Cells(.Rows.Count, 7).End(xlUp)).Value
End With
For Each vntItem In avntValues
objDictionary.Item(Key:=vntItem) = vbNullString
Next
ComboBox2.List = objDictionary.Keys 'combobox Jahr laden Ende
Call objDictionary.RemoveAll 'combobox Personal laden Anfang
With Worksheets("daten")
avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
End With
For Each vntItem In avntValues
objDictionary.Item(Key:=vntItem) = vbNullString
Next
ComboBox1.List = objDictionary.Keys
ComboBox4.List = objDictionary.Keys 'combobox Personal laden Ende
Call objDictionary.RemoveAll 'combobox Monat laden Anfang
With Worksheets("daten")
avntValues = .Range(.Cells(4, 8), .Cells(.Rows.Count, 1).End(xlUp)).Value
End With
For Each vntItem In avntValues
objDictionary.Item(Key:=vntItem) = vbNullString
Next
ComboBox3.List = objDictionary.Keys 'combobox Monat laden Ende
Set objDictionary = Nothing
Dann kommt ein Fehler:
avntValues As Variant

Meldung: Mehrfachdekleration im aktuellen Gültigkeitsbereich
Bin i echt so blöd?
Anzeige
AW: Doppelte Combobox Einträge verhindern
29.01.2021 22:44:17
Jürgen
ok, war ein Fehler meinerseits!
Alles funktioniert einwandfrei!
Dank dir vielmals
lg Jürgen

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige