Also, meine Frage - WIE kann ich in der Listbox "Doppelte" Einträge vermeiden. Ich will wirklich immer nur einmal z.B. Lehmann oder Müller stehen haben...
Vielen Dank und Gruß
Kay
Musterdatei:
https://www.herber.de/bbs/user/72706.xlsm
Private Sub UserForm_Initialize()
Dim col As New Collection
arow = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
On Error Resume Next
For iRow = 2 To arow
col.Add Cells(iRow, 1), Cells(iRow, 1) 'hier wird ein fehler erzeugt, wenn der eintrag _
bereitsvorhanden ist
If Err = 0 And Cells(iRow, 1).Value "TOTAL" Then
ComboBox1.AddItem Cells(iRow, 1)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
End Sub
Function fncListe2(Optional sText As String)
Dim oDaten As Object
i = 0
k = 0
n = 0
k = Worksheets("Daten").Cells(Rows.Count, 1).End(xlUp).Row
Set oDaten = CreateObject("Scripting.dictionary")
If k = 1 Then
ReDim Preserve arrListe2(0)
fncListe2 = arrListe2
Exit Function
Else
arrTmp2 = Worksheets("Daten").Range("A2:D" & k)
ReDim arrListe2(1 To UBound(arrTmp2))
For i = 1 To UBound(arrTmp2)
If LCase(arrTmp2(i, 2)) Like "*" & LCase(sText) & "*" Then
oDaten(arrTmp2(i, 2)) = 0
End If
Next
On Error Resume Next
fncListe2 = oDaten.keys
End If
End Function
Um doppelte Einträge in einer Listbox in Excel zu vermeiden, kannst du folgenden VBA-Code verwenden. Dieser wird im UserForm_Initialize
-Ereignis platziert:
Private Sub UserForm_Initialize()
Dim col As New Collection
arow = IIf(IsEmpty(Range("A65536")), Range("A65536").End(xlUp).Row, 65536)
On Error Resume Next
For iRow = 2 To arow
col.Add Cells(iRow, 1), Cells(iRow, 1) ' Hier wird ein Fehler erzeugt, wenn der Eintrag bereits vorhanden ist
If Err = 0 And Cells(iRow, 1).Value <> "TOTAL" Then
ComboBox1.AddItem Cells(iRow, 1)
Else
Err.Clear
End If
Next iRow
On Error GoTo 0
End Sub
Dieser Code fügt nur einzigartige Einträge in die Listbox ein. Achte darauf, die richtige Excel-Version zu verwenden, die VBA unterstützt, wie Excel 2010 oder höher.
Fehler: Doppelte Einträge erscheinen trotzdem
UserForm_Initialize
-Ereignis eingefügt wurde und dass die Datenquelle in der richtigen Spalte angegeben ist.Fehler: Code funktioniert nicht
Eine weitere Methode, um doppelte Einträge zu filtern, ist die Verwendung eines Dictionaries. Hier ist ein Beispielcode:
Function fncListe2(Optional sText As String)
Dim oDaten As Object
Dim i As Long
Dim k As Long
k = Worksheets("Daten").Cells(Rows.Count, 1).End(xlUp).Row
Set oDaten = CreateObject("Scripting.Dictionary")
For i = 2 To k
If Not oDaten.Exists(Cells(i, 1).Value) Then
oDaten.Add Cells(i, 1).Value, Nothing
End If
Next i
fncListe2 = oDaten.Keys
End Function
Diese Funktion kann zum Erstellen einer Liste ohne doppelte Einträge verwendet werden.
Angenommen, du hast eine Liste von Namen in Spalte A, beginnend ab Zeile 2. Der oben genannte VBA-Code würde dafür sorgen, dass nur einzigartige Namen in der Listbox angezeigt werden, sodass du beispielsweise nur "Müller" oder "Lehmann" einmal in der Dropdown-Liste siehst.
Option Explicit
: Das Hinzufügen von Option Explicit
am Anfang deiner Module hilft, Fehler durch nicht deklarierte Variablen zu vermeiden.1. Wie kann ich den Code anpassen, um mehr Spalten zu berücksichtigen?
Du kannst die Schleife anpassen, um durch mehrere Spalten zu iterieren, indem du die Cells(iRow, x)
-Referenz für verschiedene Spalten verwendest.
2. Funktioniert dieser Code auch in Excel Online?
Leider nicht. VBA wird nicht in Excel Online unterstützt. Du musst Excel Desktop verwenden, um diesen Code auszuführen.
3. Was ist der Unterschied zwischen Collection und Dictionary?
Eine Collection erlaubt doppelte Schlüssel, während ein Dictionary nur eindeutige Schlüssel zulässt, was es ideal für das Verhindern doppelter Einträge macht.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen