Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
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 mit eindeutigen Werten aus 3.Tab

Listbox mit eindeutigen Werten aus 3.Tab
31.10.2022 14:05:56
Thomas
Hallo,
ich möchte eine Listbox aus 3 Tabellen füllen, wobei nur eindeutige Werte in die Listbox aufgenommen werden sollen, also das es keine Doppelungen gibt.
Die Listbox aus einer Tabelle zu füllen, geschieht aktuell so:

Sub ListFuellen()
Dim lngRow As Long
Dim lngLastRow As Long
Dim Nummer As String
Dim BereichWiehl As String
If for.opt1 = True Then Nummer = "1"
If for.opt2 = True Then Nummer = "2"
If for.opt3 = True Then Nummer = "3"
for.lib.Clear
for.lib.ColumnCount = 3
for.lib.ColumnWidths = "3,1cm;3cm;1,5cm"
for.lib.BackColor = RGB(188, 210, 238)
With tblEins
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lngRow = 2 To lngLastRow
If .Cells(lngRow, 6) = for.cob.Value And .Cells(lngRow, 7) = Bereich Then
for.lib.AddItem .Cells(lngRow, 34).Value
for.lib.List(for.lib.ListCount - 1, 1) = .Cells(lngRow, 4).Value & "," & .Cells(lngRow, 3).Value
for.lib.List(for.lib.ListCount - 1, 2) = "|" & .Cells(lngRow, 2).Value
End If
Next lngRow
End With
End Sub
Die eindeutige nummer ist die in Spalte 34, in jeder Tabelle kommt diese definitiv nur einmal vor, aber sie könnten in den beiden weiten Tabellen auch vorkommen.
Wie kann ich die beiden weiteren Tabellen (tblZwei und tblDrei)mit den gleichen IF prüfungen in die Listbox einlesen, wo nur zusätzlich noch geprüft wird ob es diesen eintrag nicht schon gibt?
Danke

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox mit eindeutigen Werten aus 3.Tab
31.10.2022 14:27:57
Daniel
Hi
Als erstes würde ich dir empfehlen, deine Userform nicht "for" zu nennen.
Ist zwar machbar, aber es kann den Leser des Codes verwirren, wnndes direkt neben einer "For-Schleife steht"
Duplikate in einer Listbox vermeidet man ganz einfach.
Man macht eine Schleife über die Elemente der Userform und prüft, ob der Wert schon drin ist.
Hierbei kann man ausnutzen, dass man am Schleifenzähler erkennen kann, ob die Schleife vorzeitig abgebrochen wurde oder vollständig durchgelaufen ist. Hierzu vergleicht man den Zähler mit dem Schleifenendwert.
Hier mal das Prinzip, ich denke du kannst das für dich anpassen

For i = 0 to Listbox1.ListIndex - 1
If Listbox.List(i, 0) = neuerWert then exit for
Next
If i > (Listbox1.Listindex - 1) then Listbox1.AddItem neuerWert
Da Listboxen nicht tausende von Elementen enthalten sollten, ist die Schleife hier kein Problem.
Wenn man weiß, dass man mit .Additem nicht nur am Ende der Listbox einfügen kann sondern auch mittendrin (wenn man zusätzlich den Index der Einfügeposition angibt), kann man mit dieser Methode auch gleichzeitig die Listbox sortiert erstellen.
Gruß Daniel
Anzeige
AW: Listbox mit eindeutigen Werten aus 3.Tab
02.11.2022 10:35:28
Thomas
Hallo Daniel,
so ganz verstehe ich dein Beispiel nicht und es macht leider auch nicht was es soll, zumindest so wie ich es eingesetzt hab nicht....
Ich hab das dein in meinem Beispiel so eingebaut

Sub ListFuellen()
Dim lngRow As Long
Dim lngLastRow As Long
Dim Nummer As String
Dim BereichWiehl As String
If for.opt1 = True Then Nummer = "1"
If for.opt2 = True Then Nummer = "2"
If for.opt3 = True Then Nummer = "3"
for.lib.Clear
for.lib.ColumnCount = 3
for.lib.ColumnWidths = "3,1cm;3cm;1,5cm"
for.lib.BackColor = RGB(188, 210, 238)
With tblEins
lngLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
For lngRow = 2 To lngLastRow
If .Cells(lngRow, 6) = for.cob.Value And .Cells(lngRow, 7) = Bereich Then
For i = 0 To ffor.lib.ListIndex - 1
If for.lib.List(i, 0) = .Cells(lngRow, 36) Then Exit For
Next i
If i > (for.lib.ListIndex - 1) Then
for.lib.AddItem .Cells(lngRow, 34).Value
for.lib.List(for.lib.ListCount - 1, 1) = .Cells(lngRow, 4).Value & "," & .Cells(lngRow, 3).Value
for.lib.List(for.lib.ListCount - 1, 2) = "|" & .Cells(lngRow, 2).Value
End If
End If
Next lngRow
End With
End Sub
End Sub
Wie muss ich das anders einfügen? Komisch ist das "i" immer =0 ist und dadurch wird dieser part

  If for.lib.List(i, 0) = .Cells(lngRow, 36) Then Exit For
natürlich garnicht erst aufgerufen.
Wie würde ich denn am besten die beiden anderen Tabellen dann noch mit abfragen? Einfach den Code noch zweimal in die Sub und nur die Tabellennamen anpassen?
Was deinen Punkt mit der Bennenung "for" angeht, hast du absolut recht, das werd ich anpassen.
Was das Sortieren über Additem angeht, das kenne ich auch noch nicht und hört sich interessant an, aber wie ich das in das Konstrukt aktuell eingebaut bekomme ist mir auch noch nicht klar, kann man die Listbox nicht am Ende "einfach" Alphabetisch z.b. sortieren?
Danke
MFG
Thomas
Anzeige
AW: Listbox mit eindeutigen Werten aus 3.Tab
02.11.2022 10:44:28
Thomas
Hi nochmal,
ich habe jetzt mal anstatt des

ListIndex - 1
ein

ListCount - 1
genommen und zumindest auf den ersten Blick scheint das so zu funktionieren das keine Duplikate aufgenommen werden!
AW: Listbox mit eindeutigen Werten aus 3.Tab
03.11.2022 08:14:03
Oberschlumpf
Hi,
was nur hält dich davon ab, per Upload Bsp-Dateien mit genügend Bsp-Daten zu zeigen, so dass man a) auch sehen kann, was du erreichen willst, b) a) hilft dann, alles besser zu verstehen, c) man muss nix "raten" für dich - man könnte testen! und d) du schaffst es noch nicht, mit Datei eine Lösung zu finden (was definitiv NICHT schlimm ist! - für so was ist ja ein Forum da!), "erwartest", hoffst aber, dass einer von uns - ohne - Datei eine Lösung findet.
Vor allem 2. Teil von d) verstehe ich immer wieder...nicht.
Ciao
Thorsten
Anzeige
AW: Listbox mit eindeutigen Werten aus 3.Tab
03.11.2022 09:27:38
Thomas
Hallo Thorsten,
sei mir nicht böse, aber so ganz verstehe ich deinen Post nicht, wenn meine Frage mit dem geposteten Code nicht nachvollziehbar ist, dann bin ich gerne bereit eine Beispieldatei bereitzustellen (jetzt auch hier anbei), ich war in dem Fall aber davon ausgegangen das mein Anliegen nicht so kompliziert ist für jemanden der fit in der Thematik ist, wenn ich damit falsch lag, tuts mir leid, aber da wäre dann vielleicht einfacher gewesen drauf hinzuweisen/zu fragen, anstatt "Unlust" vorzuwerfen!
Anbei dann die Beispieldatei, mit meinem Ausgangspost ergänzt um den Vorschlag von Daniel, den ich wie geschrieben abgeändert habe, da es bei mir (vielleicht habe ich es auch nur falsch eingesetzt) mit dem Listindes-1 nicht geklappt hat, aber mit dem listcount-1.
Bin natürlich für Verbesserungsvorschläge offen und natürlich noch die Frage wie ich das am besten über die 3 Tabellen laufen lasse.
https://www.herber.de/bbs/user/155977.xlsm
Danke
MFG
Thomas
Anzeige
AW: Listbox mit eindeutigen Werten aus 3.Tab
03.11.2022 09:49:00
Oberschlumpf
Hi Thomas,
ich hab erst mal leider nur noch Zeit bis 1130 Uhr. Ob ich bis dahin eine Lösung für dich hab, weiß ich nicht - aber jetzt, dank deiner Bsp-Datei - weiß ich genau, eine Lösung ist möglich!
Unabhängig davon, ob wer anders bis dahin vllt schon helfen konnte oder nicht, werde ich aber nach meinen Terminen detailierter auf deinen letzten Beitrag antworten.
Ciao
Thorsten
uih - schon fertig!
03.11.2022 10:36:40
Oberschlumpf
Hi Thomas,
ich bin überrascht, denn ich hab eine Lösung für dich schon fertig....staun :-)
Ok, ich konnte viel von deinem Code übernehmen - DAS - wird wahrscheinlich der Grund für den wirklich geringen Zeitaufwand sein (ich wusste echt nicht, ob ich bis 1130 Uhr fertig werde)
Nun denn....erst mal n paar Bemerkungen zu deinem letzten Beitrag.
Doch, Thomas, so langsam unterstelle ich dir wirklich, dass du keine Lust hast, gleich im Erstbeitrag deiner Fragen per Upload eine Bsp-Datei mitzuliefern.
Vielleicht denkst du "ach, ich versuch erst mal ohne Bsp-Datei zu fragen - das spart für mich Aufwand"
Ja, sicher gibt es viele Fragen in jedem Forum, die auch ohne Bsp-Dateien beantwortbar sind.
Aber du weißt ja sicher auch, dass ich dich - nicht nur heute - um eine Bsp-Datei gebeten hab!
Und nur deshalb (weil heute ja nicht das erste Mal ist) unterstelle ich dir Unlust.
So, nun zurück zu meiner Idee:
hier, probier mal
https://www.herber.de/bbs/user/155981.xlsm
Den schon bestehenden Code hab ich "unberührt" gelassen, bzw das Eine oder Andere übernommen.
Grundsätzlich aber hab ich "meinen eigenen Code" erstellt, weil ich mich dann nicht so "reinlesen" muss.
Also, nachdem das Userform(ular) gestartet wurde, und du auf den Button klickst...
...werden aus allen gewünschten Tabellenblätter nur dann Daten in die Listbox übernommen, wenn diese Daten noch nicht in der Listbox enthalten sind
...bitte beachte meine Kommentare im Code, weil du vielleicht etwas anpassen musst...
Ich würde mich freuen, wenn du mir antwortest, ob ich helfen konnte oder nicht.
Ciao
Thorsten
Anzeige
AW: uih - schon fertig!
04.11.2022 14:24:28
Thomas
Hallo Thorsten,
erstmal vielen Dank für deine Beispielmappe, ich bin immer wieder überrascht auf welche Arten man ein Problem lösen kann, bei den ersten Tests sieht es so aus das alles wie gewünscht funktioiert, was jetzt dann wenn aber die 3 Tabellen nacheinander eingelesen werden "negativ" auffällt ist, das alle 3 Tabellen Alphabetisch Absteigend sortiert sind und nacheinander genau so in die Listbox kommen, kann ich beim einlesen direkt Alphabetisch sortieren oder sollte nach dem einlesen besser eine Schleife drüber laufen die die Namen (kommen aus

.Cells(lloRow, 4).Value
) sortiert?
Ansonsten hast du ja z.b. das hier

Dim lctrLSB As Control
verwendet, hat dies einen bestimmten vorteil, außer das es ein bisschen Tippen spart?Performance? Deine For Each schleife und dann die Abfrage auf die relevanten Tabellen ist super, da es den Code deutlich kürzer macht!
Danke für deine Hilfe und was die Beispieldateien angeht, werde ich mich bessern.
MFG
Thomas
Anzeige
AW: uih - schon fertig!
04.11.2022 19:53:21
Oberschlumpf
Hi Thomas,
da ich zu Beginn mit meinem Code noch nicht wusste, wo die Reise hingeht, hab ich
Dim ... As Control
verwendet, weil, genau, weniger Tipparbeit.
Ohne diese Dim-Zeile hätte man im ganzen Code - immer - Userform1.Listbox schreiben müssen...und lctrLSB sind doch viel weniger Buchstaben, oder? :-)
Auf die Performance wird sich das nicht auswirken, denke ich.
Ich verstehe deine etwas komisch formulierte Sortier-Frage nicht.
- sollen nun alle Einträge in Listbox nach Listbox-Spalte 1 einfach nur absteigend sortiert werden, egal woher die Daten kommen?
- sollen alle Einträge in Listbox weiterhin so wie jetzt eingetragen werden (eine Tabelle nach der anderen) - aber zusätzlich eine "Kennung" erhalten, aus welcher Excel-Tabelle sie sind?
- oder sollen alle Einträge in Listbox zusätzlich eine "woher-bin-ich-Kennung" erhalten und trotzdem nach Inhalt in Listbox-Spalte 1 absteigend sortiert werden?
Wenn "woher-bin-ich-Kennung" gewünscht, soll dies in einer zusätzlichen Spalte in Listbox eingetragen werden, oder an den Anfang/das Ende in Listbox-Spalte 1, in der ja bis jetzt nur KEY3 aus den Excel-Tabellen (Spalte 37) steht?
Ciao
Thorsten
Anzeige
AW: uih - schon fertig!
06.11.2022 13:45:31
Thomas
Hallo Thorsten,
wenn alle Tabellen in der Listbox eingelesen sind, dann sollen sie noch Alphabetisch sortiert werden, egal aus welcher Tabelle die Daten kommen.
Danke
AW: uih - schon fertig!
06.11.2022 14:01:56
Oberschlumpf
Hi Thomas,
geahnt hatte ich das, aber wegen der vielen anderen Interpretationsmöglichkeiten deiner komisch formulierten Sortierfrage war ich mir eben nicht sicher - und da ich nicht umsonst programmieren wollte, fragte ich lieber nach.
Hier, probier mal
https://www.herber.de/bbs/user/156045.xlsm
Die Listbox enthält nun in zusätzlicher Spalte den Tab.blattnamen, woher die Daten kommen.
Wenn das egal ist, dann im Code entsprechend anpassen - im Code hab kommentiert, wo du anpassen musst.
Hilfts?
Ciao
Thorsten
Anzeige
du weißt schon...
06.11.2022 08:13:19
Oberschlumpf
Hi Thomas,
...dass dieser Beitrag von dir bald im Archiv "verschwindet", oder?
Du musst dann einen neuen Beitrag erstellen, am besten mit nem Link zu diesem Beitrag hier (der Archiv-Link!).
Und meine letzte Frage beantworte dann in dem neuen Beitrag.
Ciao
Thorsten
AW: du weißt schon...
06.11.2022 13:47:26
Thomas
Hallo Thorsten,
bin leider die letzten beiden Tage nicht dazu gekommen deine Frage zu beantworten, habs aber grade nachgeholt.
MFG
Thomas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige