Combobox in Excel mit Daten aus Tabellenblatt füllen. Ohne Dubletten!
In eine Combobox werden Daten mittels einer Schleife eingelesen. Manche Zelleinträge sind jedoch gleich und tauchen deshalb mehrmals in der Combobox auf. Wie kann man das verhindern.
Die Contains Methode gibt es in VBA nicht oder?
Antwort schreiben
Antwort 1 von Beverly vom 15.06.2019, 21:21 Options
Hi Rainer,
wenn die Daten sortiert vorliegen, kannst du das mit diesem Code machen
Private Sub UserForm_Activate()
Dim loZeile As Long
With ComboBox1
.AddItem Worksheets("Tabelle1").Cells(1, 1)
For loZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
' Übergabe des Wertes, wenn er verschieden vom vorhergehenden und ungleich leer ist
If .List(.ListCount - 1, 0) <> CStr(Worksheets("Tabelle1").Cells(loZeile, 1)) And CStr(Worksheets("Tabelle1").Cells(loZeile, 1)) <> "" Then
.AddItem Worksheets("Tabelle1").Cells(loZeile, 1)
End If
Next loZeile
End With
End Sub
Bis später,
Karin
Antwort 2 von 40Rainer vom 15.06.2019, 21:36 Options
Hallo Karin,
vielen Dank für deine superschnelle Hilfe.
Ich wollte die Daten eigentlich nicht sortieren aber wenn es nicht anders geht muß ich wohl eine Sortierroutine vorschalten. Das Problem ist das ich mehrere Spalten habe in denen jeweils eine solche Auswahl immer in Abhängigkeit der vorgeschalteten Spalte stattfinden soll. D.h. ich muß bei jeder Spaltenauswahl die ganze Datenbank umsortieren.
Vielen Dank ich werde das mal so übernehmen.....
Antwort 4 von 40Rainer vom 15.06.2019, 22:05 Options
Hallo Leute,
vielen dank für euere Unterstützung. Ihr seid klasse!
Werde mal versuchen das einzubauen.
Gruß Rainer
Antwort 5 von 40Rainer vom 15.06.2019, 23:41 Options
Hallo Miteinander,
habe versucht Karin`s Code in meinen bestehenden einzubauen. Bin leider blutiger Anfänger und bekomme es nicht hin.
Kann mir jemand weiterhelfen?
Private Sub CB1_DropButtonClick()
Dim row As Long
Dim Suchwort As String
'CB1.Clear
CB1.LinkedCell = "F7"
For row = 2 To 65536
If ActiveWorkbook.Worksheets("Datenbank").Cells(row, 2).Value <> "" Then
If ActiveWorkbook.Worksheets("Auswahl").Cells(11, 5).Value = ActiveWorkbook.Worksheets("Datenbank").Cells(row, 2).Value _
.List(.ListCount - 1, 0) <> CStr(Worksheets("Datenbank").Cells(row, 1)) Then 'mit ListCount stimmt was nicht?Ist das nur ein Platzhalter?
CB1.AddItem ActiveWorkbook.Worksheets("Datenbank").Cells(row, 3).Value
End If
Else
End
End If
Next
End Sub
Danke im Voraus..
Antwort 6 von Beverly vom 16.06.2019, 09:15 Options
Hi Rainer,
in meinem Code ist alles in eine With ... End With Anweisung eingebunden. In diesem Fall braucht der Name des Elements dem Befehl nicht vorangesetzt zu werden, sondern es genügt der "." bei ".List" und bei ".ListCount - 1". Da du diese With-Anweisung nicht verwendest, musst du CB1 vor dem Punkt ergänzen.
Bis später,
Karin
Antwort 7 von 40Rainer vom 16.06.2019, 10:10 Options
Hallo Karin,
danke für deine Unterstützung...