Supportnet / Forum / Tabellenkalkulation
Combobox in Excel mit Daten aus Tabellenblatt füllen. Ohne Dubletten!
Frage
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 1 von Beverly
Hi Rainer,
wenn die Daten sortiert vorliegen, kannst du das mit diesem Code machen
Bis später,
Karin
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
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.....
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 3 von schnallgonz
Hi Rainer,
bevor Du zuviel sortierst guckst Du hier:
https://supportnet.de/threads/1549246
Dort findest Du einen Link zu einer Musterdatei
gruß
schnallgonz
bevor Du zuviel sortierst guckst Du hier:
https://supportnet.de/threads/1549246
Dort findest Du einen Link zu einer Musterdatei
gruß
schnallgonz
Antwort 4 von 40Rainer
Hallo Leute,
vielen dank für euere Unterstützung. Ihr seid klasse!
Werde mal versuchen das einzubauen.
Gruß Rainer
vielen dank für euere Unterstützung. Ihr seid klasse!
Werde mal versuchen das einzubauen.
Gruß Rainer
Antwort 5 von 40Rainer
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..
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
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
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
Hallo Karin,
danke für deine Unterstützung...
danke für deine Unterstützung...