Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1724to1728
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
Filter sollen auf mehrere Comboboxen wirken
02.12.2019 14:29:35
haze
Hallo zusammen,
ich beiße mich schon seit Tagen an einem Problem aus, weshalb ich euch um eure Hilfe bitten möchte:
Es gibt 3 ComboBox Felder einer UserForm, die beim intialen Laden des Userforms wie folgt definiert werden:
ComboBox1 = Lieferant
ComboBox2 = Rechnungsbeschreibung
ComboBox3 = Kostenart
...
Worksheets("Invoices Archive").Select ' hier dropdown für Rest
ende = 0
Do Until Cells(ende + 1, 1) = ""
ende = ende + 1
Loop
Invoice.ComboBox1.RowSource = "a2:a" & ende
Invoice.ComboBox2.RowSource = "B2:B" & ende
Invoice.ComboBox4.RowSource = "f2:f" & ende
...

Funktioniert soweit gut, es lassen sich alle Einträge dieser Spalten auswählen.
Hintergrund der Problemstellung - Sinn und Zweck ist die vereinfachte Erfassung von eingehenden Rechnungen: So soll bei der Auswahl des Lieferanten in der ComboBox1 in ComboBox2 nur noch das zur Auswahl stehen, was bisher zu diesem Lieferanten angefallen ist.
Vorgehen: Ich generiere eine ComboBox1_Change() Anfrage, filtere Spalte A nach dem, was in ComboBox1 definiert wurde und definiere die Einträge der ComboBox2 entsprechend dem, was in Zeile B nach der Filterung übrig bleibt.
Das Thema wurde schon verschiedener Weise aufgegriffen, jedoch greift keine der Lösungen, auch auf mehrfaches Testen.
Anbei ein Beispiel von Werner, das ich aus folgendem Thread https://www.herber.de/forum/archiv/1580to1584/1583273_ComboBox_nur_gefilterte_Werte_zulassen.html in meine Datei überführt habe:
Private Sub ComboBox1_Change()
Dim raBereich As Range, raZelle As Range
Dim loLetzte As Long
Sheets("Invoices Archive").Visible = True
Sheets("Invoices Archive").Select
If Invoice.ComboBox1 = "Please enter or choose the supplier / Bitte Lieferant eingeben oder auswählen" Then
Exit Sub
Else
On Error GoTo weiter:
ActiveSheet.Range("A:I").AutoFilter Field:=1, Criteria1:=Invoice.ComboBox1 '/ nach Supplier filtern
weiter:
### Bis hierhin funktioniert das Makro ###
With Worksheets("Invoices Archive")
loLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
Set raBereich = .Range(Cells(2, 1), Cells(loLetzte, 1))
For Each raZelle In raBereich.SpecialCells(xlCellTypeVisible)
Me.ComboBox2.AddItem raZelle.Value
Next raZelle
End With
End If

Auch die Fassung von Nepomuk hat nicht funktioniert, erfolglos war ich bei diesen Ansätzen:
https://www.herber.de/forum/archiv/1336to1340/1339889_Combobox_mit_gefilterten_Werten_fuellen.html oder
https://www.herber.de/forum/archiv/1196to1200/1197059_Combobox_Fokus_auf_gefilterte_Daten.html
Herzlichen Dank vorab für eure Mühe und viele Grüße
Haze

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Filter sollen auf mehrere Comboboxen wirken
02.12.2019 15:27:50
Matthias
Moin!
Also auf die schnelle könnte das funktionieren. Kommt auch drauf an, wieviele Daten es sind. Ggf. könnte man auch vorher filtern.
Private Sub ComboBox1_Change()
Dim ende As Long, zeile As Long
Dim daten, anzeige, auswahl
ende = Worksheets("Invoices Archive").Cells(Worksheets("Invoices Archive").Rows.Count, 1).End( _
xlUp).Row
daten = Worksheets("Invoices Archive").Range("A2:B" & ende)
auswahl = Me.ComboBox1.Value
For zeile = 1 To ende - 1
If daten(zeile, 1) = auswahl Then
text = text & daten(zeile, 2) & "@"
End If
Next
If text  "" Then text = Left(text, Len(text) - 1)
Me.ComboBox2.Clear
If text  "" Then Me.ComboBox2.List = Split(text, "@")
End Sub

VG
Anzeige
AW: Filter sollen auf mehrere Comboboxen wirken
02.12.2019 15:51:34
haze
Hallo Matthias,
vielen Dank für deinen schnellen Vorschlag.
Leider kommt es zu einem Fehler:
"Laufzeitfehler '-2147467259 (800004005)':
Nicht näher bezeichneter Fehler."
Der Fehler tritt bei folgendem Schritt auf:
Me.ComboBox2.Clear
Irgendeine Idee, was das sein könnte?
Danke dir schonmal und viele Grüße
AW: Filter sollen auf mehrere Comboboxen wirken
02.12.2019 16:52:44
Matthias
Moin!
Ich glaube, dass liegt daran, dass du die CB2 vorher mit RowSource befüllst. Dann kannst du die mit .clear nicht löschen. Setze mal vor die Clear-Zeile die hier.
Me.ComboBox2.Clear.RowSource = ""

Damit wird das RowSource gelöscht und der Fehler sollte nicht mehr da sein.
VG
Anzeige
AW: Filter sollen auf mehrere Comboboxen wirken
02.12.2019 16:59:05
Matthias
Upps, grad beim Abschicken gesehen, dass da ein Fehler war. Die einzufügende Zeile muss so aussehen:
Me.ComboBox2.RowSource = ""

VG
AW: Filter sollen auf mehrere Comboboxen wirken
03.12.2019 08:57:51
haze
Moin Matthias,
ich werd verrückt - könnte fast sein, das aufgrund des Fehlers es deshalb nie geklappt hat?!
Wie auch immer, jedenfalls läuft das schonmal :) Herzlichen Dank!!!!!
Zur Übersicht würde ich (wo ich endlich mal ein Ergebnis sehe :)) gerne ggf. noch die gefilterten Zellen bei doppelten Einträgen zusammenfassen, damit das Dropdown leerer wird - also ähnlich wie wenn man einen Filter einer Pivot anklickt.
Hättest du da spontan noch eine Idee? Falls nicht ist auch nicht schlimm, tausend Dank für deine (bisherige) Hilfe!
Anzeige
AW: Filter sollen auf mehrere Comboboxen wirken
03.12.2019 14:38:47
Matthias
Moin!
Ja, das wird der Fehler gewesen sein. Bei den Beispielcodes werden mit .additem bzw. .list Daten in die Combobox eingetragen. Das geht aber nur, wenn keine RowSource festgelegt ist - damit ist die CB ja direkt mit dem Zellbereich verknüpft. Denn musst du dann abschalten.
Bzgl. des Filters, bin ich nicht der Pivot Anwender und kenne die ehrlich gesagt nicht. Wenn du doppelte Werte in der CB2 verhindern willst, dann ändere die for Schleife mal so (in der Mitte ist noch ein if dazugekommen)
For zeile = 1 To ende - 1
If daten(zeile, 1) = auswahl Then
If InStr(1, Text, daten(zeile, 2), vbTextCompare) = 0 Then Text = Text & daten( _
zeile, 2) & "@"
End If
Next

VG
Anzeige
AW: Filter sollen auf mehrere Comboboxen wirken
03.12.2019 16:45:23
haze
Hi Matthias,
danke für die Erklärung, RowSource werde ich in Zukunft versuchen zu meiden und eine ähnliche Logik verwenden, wie sie hier zum Erfolg geführt hat (und Duplikate verhindert - danke an der Stelle, der neue Code funktioniert einwandfrei :)).
Herzlichen Dank nochmals für den tollen Support und beste Grüße
Haze

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige