Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1420to1424
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
Inhaltsverzeichnis

Listbox Filtern mit Combobox

Listbox Filtern mit Combobox
14.04.2015 22:29:17
Tom
Guten Abend,
nachdem ich bis heute nur mitleser war, bin ich jetzt endlich Mit-Glied :)
Über mein Thema gibt es schon einen Thread, den ich mal erneuern möchte.
https://www.herber.de/forum/archiv/1232to1236/1234318_Listbox_filtern_Combobox.html#bottom
Ich benutze die Datei von "Mäxl" https://www.herber.de/bbs/user/77070.xlsm
und habe da meine Probleme den code für mich anzupassen und hoffe auf eure hilfe.
1. möchte ich die listbox auf mehrere Spalten erweitern
2. möchte ich mehrere auswahlcombos anlegen
Sub checkit()
Dim ar(4) As Variant, objMyDic As Object, i As Long, tempStr1 As String, tempStr2 As String,  _
IntC As Integer, row_ As Integer
Set objMyDic = CreateObject("Scripting.Dictionary")
If chk = True Then
Cont4.Clear
For i = 1 To 5
If Controls("Cont" & i).Value = "" Then ar(i - 1) = "*" Else ar(i - 1) = Controls("Cont" _
& i).Value
tempStr1 = tempStr1 & ar(i - 1) & "/"
Controls("Cont" & i).Clear
Controls("Cont" & i) = IIf(ar(i - 1) = "*", "", ar(i - 1))
Next
For IntC = 1 To 5
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
tempStr2 = Cells(i, 1) & "/" & Cells(i, 2) & "/" & Cells(i, 3) & "/"
If tempStr2 Like tempStr1 Then
On Error Resume Next
objMyDic.Add Cells(i, IntC).Value, 0
If Err.Number = 0 And IntC = 1 Then
Cont4.AddItem Cells(i, 1)
Cont4.List(row_, 1) = Format(Cells(i, 2), "0%")
Cont4.List(row_, 2) = Cells(i, 3)
Cont4.List(row_, 3) = Cells(i, 4)
Cont4.List(row_, 4) = Cells(i, 5)
row_ = row_ + 1
End If
On Error GoTo 0
End If
Next
Controls("Cont" & IntC).List = objMyDic.keys
objMyDic.RemoveAll
Next
End If
Set objMyDic = Nothing
chk = False
End Sub
mein versuch hat leider keinen erfolg gezeigt
lg tom

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Filtern mit Combobox
14.04.2015 23:29:21
Tom
jetziger Stand
Sub checkit()
Dim ar(7) As Variant, objMyDic As Object, i As Long, tempStr1 As String, tempStr2 As String,  _
IntC As Integer, row_ As Integer
Set objMyDic = CreateObject("Scripting.Dictionary")
If chk = True Then
Cont7.Clear
For i = 1 To 6
If Controls("Cont" & i).Value = "" Then ar(i - 1) = "*" Else ar(i - 1) = Controls("Cont" _
& i).Value
tempStr1 = tempStr1 & ar(i - 1) & "/"
Controls("Cont" & i).Clear
Controls("Cont" & i) = IIf(ar(i - 1) = "*", "", ar(i - 1))
Next
For IntC = 1 To 6
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
tempStr2 = Cells(i, 1) & "/" & Cells(i, 2) & "/" & Cells(i, 3) & "/" & Cells(i, 4) & _
"/" & Cells(i, 5) & "/" & Cells(i, 6)
If tempStr2 Like tempStr1 Then
On Error Resume Next
objMyDic.Add Cells(i, IntC).Value, 0
If Err.Number = 0 And IntC = 1 Then
Cont7.AddItem Cells(i, 1)
Cont7.List(row_, 1) = Format(Cells(i, 2), "0%")
Cont7.List(row_, 2) = Cells(i, 3)
Cont7.List(row_, 3) = Cells(i, 4)
Cont7.List(row_, 4) = Cells(i, 5)
Cont7.List(row_, 5) = Cells(i, 6)
row_ = row_ + 1
End If
On Error GoTo 0
End If
Next
Controls("Cont" & IntC).List = objMyDic.keys
objMyDic.RemoveAll
Next
End If
Set objMyDic = Nothing
chk = False
End Sub

aber immernoch kein ergebnis, wo liegt mein Fehler :(
Bernd

Anzeige
AW: Listbox Filtern mit Combobox
15.04.2015 06:59:39
Luschi
HBallo Tom,
wie sollen wir Dir helfen, wenn uns als Grundlage nur die Ursprungsdatei:

Ich benutze die Datei von "Mäxl" https://www.herber.de/bbs/user/77070.xlsm
dient, Deine Änderungen im Vba-Code aber damit nicht mehr kompatibel sind. Bei mir streikt der Code schon bei 'Cont7.Clear', denn in der Ursprungsdatei gibt es kein ComboBox mit dem Namen: 'Cont7'.
Hier solltest Du uns schon Deine Datei mit Demodaten zur Verfügung stellen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
15.04.2015 16:16:19
Tom
Hallo Luschi,
sorry, da hast du natürlich recht.
Bin leider erst jetzt dazu gekommen.
Hänge meine Demo-datei mit an.
https://www.herber.de/bbs/user/97089.xlsm
Lg Tom

AW: Listbox Filtern mit Combobox
16.04.2015 16:27:37
Tom
Hallo,
war meine Datei nicht in Ordnung ?
Lg

AW: Listbox Filtern mit Combobox
16.04.2015 22:15:17
Luschi
Hallo Tom,
habe mir jetzt das nochmals angesehen. Nach dem Durchlauf der 1. For-Schleife in der Prozedur 'checkit' hat die Variable 'tempStr1' den Wert '*/*/*/*/*/*/', als 6 '/'-Zeichen.
Die Variable ''tempStr2' hat bei IntC = 1 den Wert '01.02.2015/Müller/0341-258/Ring/8,24/8,33888", also nur 5 '/'-Zeichen. Deshalb kann der Like-Vergleich nie klappen.
Die Variable 'tempSt.r1' darf nur diesen Wert haben:'*/*/*/*/*/*', also auch nur 5 '/'-Zeichen.
Dann klappt das auch:

For i = 1 To 6
If Controls("Cont" & i).Value = "" Then ar(i - 1) = "*" Else ar(i - 1) = Controls("Cont" _
& i).Value
tempStr1 = tempStr1 & ar(i - 1) & "/"
Controls("Cont" & i).Clear
Controls("Cont" & i) = IIf(ar(i - 1) = "*", "", ar(i - 1))
Next
tempStr1 = Left(tempStr1, Len(tempStr1) - 1)
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
17.04.2015 15:24:33
Tom
Hallo,
vielen dank für deine hilfe, so klappts.
Könntest du mir noch erklären was deine eigefügte Zeile bewirkt?
allerdings habe ich einen Fehler beim Filtern entdeckt :(
Wenn ich im "Cont2" nach einen Wert suche und dafür zb. ein "M" eingebe wird mir der Datensatz mit "Müller" angezeigt und der Datensatz mit "MTN" steht nicht mehr zur Auswahl :(
Wie könnte ich erreichen das nach jeden Buchstaben neu gefiltert wird.
Lg Tom

AW: Listbox Filtern mit Combobox
17.04.2015 17:55:48
Luschi
Hallo Tom,
in der bereits erwähnten For-Schleife wird dieser Befehl ausgeführt:
tempStr1 = tempStr1 & ar(i - 1) & "/"
Damit enthält die Variable 'tempStr1' insgesamt 6 '/'-Zeichen. Es dürfen aber nur 5 dieser Zeichen enthalten sein.
tempStr1 = Left(tempStr1, Len(tempStr1) - 1) löscht das letzte! Zeichen vom Inhalt der Variablen 'tempStr1', und das ist ja nun mal das '/'-Zeichen:
- Len(tempStr1) - 1 ermittelt die Gesamtzahl der Zeichen vom Inhalt minus 1
- und somit steht nicht mehr */*/*/*/*/*/ in der Variablen
- sondern */*/*/*/*/*
- und damit funktioniert der anschließende Like-Vergleich
Um im der ListBox und der 2. Combobox alle Werte zu sehen die mit dem Anfangsbuchstaben 'M' beginnen, gib in der 2. Combobox 'M*' oder 'm*' ein (ohne die einfachen Hochkommas).
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
18.04.2015 17:54:39
Tom
Hallo Luschi,
vielen dank für deine erklärungen.
Hab beim nachvollziehen gemerkt das ich bei der anpassung von Tempstr2 hinter dem letzten eintrag den "/"
vergessen hatte und somit die Zeile mit Len(tempStr1) - 1 weglassen kann.
tempStr2 = Cells(i, 1) & "/" & Cells(i, 2) & "/" & Cells(i, 3) & "/" _
& Cells(i, 4) & "/" & Cells(i, 5) & "/" & Cells(i, 6) & "/"
zum Filter: Das mit 'M*' wäre eine möglichkeit, allerdings bei vielen einträgen die mit 'M' beginnen ist das wohl noch nicht die beste lösung.
wie müsste ich vorgehen wenn ich eine aktualisierung nach jeden buchstaben haben will?
in Access nannte sich das "automatisch ergänzen"; gibts das auch in Excel?
Lg Tom

Anzeige
AW: Listbox Filtern mit Combobox
18.04.2015 21:56:15
Tom
Hallo Luschi,
kannst du mir sagen wie ich denn code ändern muss, wenn ich die row source für die listbox festlegen will.
Momentan ist die row source die aktive mappe, ich möchte das userfrm aus einer anderen mappe aufrufen.
Lg Tom

AW: Listbox Filtern mit Combobox
19.04.2015 06:14:11
Luschi
Hallo Tom,
ich habe den Vba-Code angepaßt. Beachte das neu hinzugefügte Konstrukt:
With Tabelle1
   '.... weitere Code
End With
Innderhalb des Konstrukts bezieht sich jetzt jede Cells- bzw. Range-Angabe auf diese
Tabelle, wenn davor ein '.' (Punkt) geschrieben wird; also:

tempStr2 = .Cells(i, 1) & "/" & .Cells(i, 2) & "/" & .Cells(i, 3) & "/" & _
.Cells(i, 4) & "/" &  .Cells(i, 5) & "/" & .Cells(i, 6) & "/"
https://www.herber.de/bbs/user/97154.xlsm
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
19.04.2015 12:32:06
Tom
Hallo Luschi,
ertmal danke für deine hilfe.
So kann ich die Source frei wählen :)
Aber, (wie ich das 'Aber' hasse :( )
Diese codezeile

.Cells(Rows.Count, 1).End(xlUp).Row
bedeuted doch,
gehe zur letzten gefüllten Zeile in der 1.Spalte.
Nun gibt es in mydata eine 10.Zeile die nicht mit gelistet wird :(
könntest du mir erklären warum?
Lg

AW: Listbox Filtern mit Combobox
19.04.2015 12:40:39
Tom
Schreibfehler, es ist die 11.Zeile die nicht gelistet wird.
Wenn ich den wert in der A11 ändere funktioniert es ?

AW: Listbox Filtern mit Combobox
19.04.2015 16:12:06
Luschi
Hallo Tom,
wenn Du dieses Stelle meinst:

For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
tempStr2 = .Cells(i, 1) & "/" & .Cells(i, 2) & "/" & .Cells(i, 3) & "/" & .Cells(i, 4) & _
"/" & .Cells(i, 5) & "/" & .Cells(i, 6) & "/"
so bedeutet das, das eine Laufvariable 'i' in der For-Schleife läuft von 1 bis 11.
Diese Laufvariable wird dann verwendet und den Zellbereich festzulegen:
.Cells(i, 1) bedeutet für i = 11: Zelle "A11"
.Cells(i, 2) bedeutet für i = 11: Zelle "B11" usw.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
19.04.2015 20:17:31
Tom
Hallo Luschi,
das mit der Variablen 'i' habe ich verstanden.
Das eigentliche Problem ist das der 11.Datensatz nicht in der Listbox angezeigt wird :(
und wenn ich die 10.Zeile einfach kopiere und am ende einfüge wird diese ebenfalls nicht angezeigt.
Obwohl doch die Codezeile

For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row

aussagt, zähle von der 2. bis zur letzten beschriebenen zelle in Spalte 'A' und fülle mit den Zeilen die Listbox.
Lg Tom

AW: Listbox Filtern mit Combobox
19.04.2015 21:55:26
Luschi
Hallo Tom,
Du hast .Cells(.Rows.Count, 1).End(xlUp).Row ausgetauscht gegen
.UsedRange.SpecialCells(xlCellTypeLastCell).Column
richtig wäre:
.UsedRange.SpecialCells(xlCellTypeLastCell).Row
Aber das ist nicht die Ursache. Tatsächlich liegt es am Objekt 'Dictionary', welches nur
eineindeutige Werte aufnehmen kann: objMyDic.Add .Cells(i, IntC).Value, 0
Hiermit werden alle Datumsangaben aus der Spalte 'A' aufgenommen, die einmalig sind.
Somit wir nur das 1. Auftauchen des Datums '09.02.2015' berücksichtigt.
Die restlichen 5 Zeilen mit dem gleichen Datumswert fallen somit unter dem Tisch.
Nun mußt Du entscheiden, wie es weiter gehen sollen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Listbox Filtern mit Combobox
19.04.2015 22:40:47
Tom
Hallo Luschi,
Nun mußt Du entscheiden, wie es weiter gehen sollen.

Da wäre die Frage welche möglichkeiten gäbe es denn?
Eine möglichkeit wäre, am Anfang eine Spalte für die lfd.nr. einzufügen.
Diese könnte man ja dann wieder ausblenden bei bedarf.
Hättest du eine idee?
Lg Tom

AW: Listbox Filtern mit Combobox
20.04.2015 04:17:56
Luschi
Hallo Tom,
was ich mit der Aussage

Nun mußt Du entscheiden, wie es weiter gehen sollen.
meinte ist:
- welche Datensätze (DS) willst Du in der Listbox sehen?
- wenn die Antwort ist: Alle, dann braucht man das 'Dictionary' überhaupt nicht
- wenn die Andwort ist: Alle außer Doppelte
- dann muß definiert werden, woran man doppelte DS erkennt
- man könnte eine lfd.Nr. in Spalte 'A' einführen, die dann nicht doppelt vergeben werden darf
Mal sehen, wie Deine Antwort lautet.
Gruß von Luschi
aius klein-Paris

AW: Listbox Filtern mit Combobox
20.04.2015 17:22:15
Tom
Hallo Luschi,
danke für deine erklärung.
Ich entscheide mich zur Lfd.nr. in der Spalte 'A'. Das scheint mir sinnvoll zu sein.
Nun wollte ich noch ein älteres Problem aufgreifen, das Filtern der Eingabe in die Combo's
Dein Tip mit 'M*' wäre eine möglichkeit, allerdings ist bei vielen einträgen die mit 'M' beginnen das immernoch sehr umständlich. :(
wie müsste ich vorgehen wenn ich eine aktualisierung nach jeden buchstaben haben will?
Geht das überhaupt in excel?
Lg Tom

AW: Listbox Filtern mit Combobox
20.04.2015 20:15:48
Tom
Hallo Luschi,
danke für deine erklärung.
Ich entscheide mich zur Lfd.nr. in der Spalte 'A'. Das scheint mir sinnvoll zu sein.
Nun wollte ich noch ein älteres Problem aufgreifen, das Filtern der Eingabe in die Combo's
Dein Tip mit 'M*' wäre eine möglichkeit, allerdings ist bei vielen einträgen die mit 'M' beginnen das immernoch sehr umständlich. :(
wie müsste ich vorgehen wenn ich eine aktualisierung nach jeden buchstaben haben will?
Geht das überhaupt in excel?
Lg Tom

AW: Listbox Filtern mit Combobox
18.04.2015 21:32:59
Tom
Hallo Luschi,
vielen dank für deine erklärungen.
Hab beim nachvollziehen gemerkt das ich bei der anpassung von Tempstr2 hinter dem letzten eintrag den "/"
vergessen hatte und somit die Zeile mit Len(tempStr1) - 1 weglassen kann.
tempStr2 = Cells(i, 1) & "/" & Cells(i, 2) & "/" & Cells(i, 3) & "/" _
& Cells(i, 4) & "/" & Cells(i, 5) & "/" & Cells(i, 6) & "/"
zum Filter: Das mit 'M*' wäre eine möglichkeit, allerdings bei vielen einträgen die mit 'M' beginnen ist das wohl noch nicht die beste lösung.
wie müsste ich vorgehen wenn ich eine aktualisierung nach jeden buchstaben haben will?
in Access nannte sich das "automatisch ergänzen"; gibts das auch in Excel?
Lg Tom

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige