Supportnet Computer
Planet of Tech

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

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.....

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

Antwort 4 von 40Rainer

Hallo Leute,

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..

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

Antwort 7 von 40Rainer

Hallo Karin,

danke für deine Unterstützung...