Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1696to1700
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
Bitte testen: Debuggen <> Wahrheit
18.06.2019 09:25:54
Sven
Hallo zusammen,
vielleicht kann mal jemand in angehängte Datei schauen:
Ich habe ein Suchfeld, in das bspw. "buchhaltung" eingegeben werden kann. Es wird dann auf den Reiter der Suchergebnisse gesprungen. Klicke ich dort die letzte Fundstelle doppelt an, soll eigentlich zu der Stelle auf Reiter 0 gesprungen werden. Warum springt er zu einer anderer Stelle?
Debugge ich das ganze (F5), verhällt sich das ganz anders und der richtige Wert wird auf dem ersten Reiter markiert. Kann das jemand nachvollziehen?
Die Datei ist zur Anonymisierung stark beschnitten, im Code solltet Ihr Euch zurecht finden. Über alle Anmerkungen bin ich dankbar - auch, wie bspw. das Füllen der Listbox schneller/performanter laufen könnte.
https://www.herber.de/bbs/user/130451.xlsm
Danke und Grüße
Sven

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bitte testen: Debuggen <> Wahrheit
18.06.2019 10:11:46
Daniel
Hi
da du Liste aus der Tabelle bis auf einige Spalten komplett in die Liste übernimmst, kannst du dir das ganze Gedöns sparen und die Werte direkt in die Tabelle schreiben.
am besten über RowSource, dann könntest du dir sogar die Überschriften mit anzeigen lassen.
dh im Initialize-Event:
liboU.RowSource  = "Universum!A2:K" & Sheets("Universum").Cells(rows.count, 1).end(xlup).Row
die nicht benötigten Spalten blendest du aus, in dem du bei ColumnWidth für die entsprechenden Spalten eine 0 einträgst.
wenn du die Liste mit den Suchergebnissen erstellst, würde ich einfach die Zeilennummer der Fundstelle in eine weitere Spalte mit hinzufügen:
liboS.List(lngAnzahl - 1, 3) = c.Row
im Doppelclick-Event der liboS setzt du dann einfach den Listindex der liboU auf diesen Wert -2 (um die Zeilennummer an den Listboxindex anzugleichen.
Gruß Daniel
Anzeige
AW: Bitte testen: Debuggen <> Wahrheit
18.06.2019 11:14:24
Sven
Hallo Daniel,
danke für die Rückmeldung.
Leider übernehme ich nicht immer die ganze Liste. In der Befüllungsroutine sorgt diese Abfrage dafür, dass die Filter-Comboboxen auf dem Userform (die ich für das Beispiel entfernt habe) berücksichtigt werden:
For i = 2 To lngLastCell
If (coboFUnternehmen = "alle" Or coboFUnternehmen = .Range("B" & i).Value) And  _
_
(coboFAbteilung = "alle" Or coboFAbteilung = .Range("D" & i).Value) And _
(coboFPruefer = "alle" Or ((strPrueferKuerzel = .Range("J" & i).Value And  _
checkFP1 = True) _
Or (strPrueferKuerzel = .Range("K" & i).Value And  _
checkFP2 = True))) And _
(coboFIntervall = "alle" Or coboFIntervall = .Range("P" & i).Value) And _
(coboFLetzte = "alle" Or coboFLetzte = CStr(.Range("AJ" & i).Value)) And _
(coboFFaelligkeit = "alle" Or CStr(coboFFaelligkeit) = CStr(.Range("AF" & i). _
Value)) And _
(coboFPlanung = "alle" Or ((coboFPlanung = strPlanungFilter1 And CInt(.Range( _
"AE" & i).Value)) = CInt(strPlanjahr) _
Or (coboFPlanung = strPlanungFilter2 And CInt(.Range( _
"AE" & i).Value)) > CInt(strPlanjahr) _
Or (coboFPlanung = "nicht eingeplant" And .Range("AE" & i).Value = ""))) Then
Der Anwender filtert also, welche Zeilen es in die Listbox schaffen. Da hilft mir rowSource nicht weiter, oder? Wie viele Spalten kann so eine Listbox überhaupt haben? Die Tabelle ist etwa 40 Spalten breit. Die -2 in Deinem Beispiel habe ich nicht verstanden.
Und kannst Du das grundsätzliche Phänomen nachvollziehen, dass sich der Code zur Laufzeiot anders verhällt als im Debuger?
Danke und Grüße
Sven
Anzeige
AW: Bitte testen: Debuggen <> Wahrheit
18.06.2019 12:06:52
Daniel
stimmt, dann hilft dir rowsource nicht weiter.
allerdings, woher soll ich das wissen, wenn du solche Sachen aus der Beispieldatei kommentarlos entfernst? Ich kann ja nur die Informationen verwenden, die du mir gibst
wieviele Spalten eine Listbox haben kann, hängt davon ab, wie du sie befüllst.
mit RowSource oder .List = Array beleibig viele, mit AddItem maximal 10.
die -2 kommt daher dass deine Liste in der Tabelle ab der Zeile 2 beginnt, in der Listboxliste aber der erste Eintrag den Index 0 hat. Das ist einfach dazu da, um von der Zeilennummer auf den Listboxindex umzurechnen.
wenn du die Daten gefiltert in die erste Listbox übernimmst, dann würde ich beim erstellen der zweiten Listbox mit den Suchergebnissen dann eben nicht die Tabelle durchsuchen, sondern die Listbox liboU (dann mit einer Schleife) und in die Listbox liboS den Listindex der jeweiligen Fundtelle mit übernehemen.
dann kannst du auch wieder die jeweilge Zeile direkt auswählen.
Gruß Daniel
Anzeige
AW: Bitte testen: Debuggen <> Wahrheit
18.06.2019 13:26:59
Sven
Hallo Daniel,
ich behelfe mir jetzt so, dass ich die Filter-Einstellungen des Userforms in den Autofilter des Tabellenblattes übersetze, den gefilterten Tabelleninhalt auf ein Dummy-Tabellenblatt kopiere und diese Tabelle als rowSource für die Listbox nehme. Ist deutlich schneller. Vielleicht kannst Du mir bei zwei Problemen helfen:
1: Du siehst im obigen Code, dass ich die Filterkriterien verknüpft habe, also bspw. eine Zeile in der Listbox landet, wenn ein bestimmter Wert in Spalte X oder Y vorkommt. Das bekomme ich mit dem Automfilter nicht abgebildet, oder?
2: In Zeile 1 steht die Spaltenüberschrift. Wie bekomme ich es hin, dass die Listbox diese übernimmt? ColumnHeads habe ich auf true gesetzt. Die oberste Zeile der Listbox ist jetzt zwar hervorgehoben, aber leer.
Danke und Grüße
Sven
Anzeige
AW: Bitte testen: Debuggen <> Wahrheit
18.06.2019 15:50:00
Daniel
zu 1) nein, das kann der Autofilter nicht
hier müsstest du dir anderweitig behelfen, z.b mit einer Hilfsspalte mit Formel und dann mit dieser Hilfsspalte filtern.
zu 2) ich sehe jetzt nicht, was du gemacht hast. um die Spaltenüberschriften in der Listbox anzuzeigen muss folgendes gegeben sein:
- die Überschriftenzeile darf nicht Bestandteil der RowSource sein
- es wird diejenige Zeile als Überschrift verwendet, die direkt über der ersten Zeile der RowSource steht.
Es gäbe eventuell noch eine dritte Möglichkeit, die Listbox zu befüllen:
- fülle die Listbox zunächst mit allen Zeilen aus der Tabelle:
liboU.List = Sheets(...).Range(...).Value

- laufe dann mit einer Schleife rückwärts durch die Listbox und lösche alle nicht benötigten _ Zeilen mit

liboU.RemoveItem i
Gruß Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige