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
Inhaltsverzeichnis

Suche in Liste

Suche in Liste
03.12.2019 19:08:38
Peer
Hallo.
Ich habe eine UF "Suche", bei der ich nach einem Ort suche, der in einer ListBox steht. Diese ListBox bekommt die Daten aus Sheet "Reiseziele" A1:C.
Beim Laden von UF frm_Suche wird die Liste korrekt gefüllt.
Nun kann in der ListBox der Ort auch mehrmals vorkommen. Das soll in der ListBox gefiltert werden.
Das ist der erste Punkt, der bei mir nicht klappen will.
Und das zweite Problem bei mir ist, dass bei Löschen des Inhaltes der Suche der Filter wieder gelöscht werden soll und alle Einträge wieder in der ListBox stehen sollen.
Das Seltsame ist, dass ich die Lösung schon mal hatte und wieder weg ist.
Ich stehe gerade auf dem Schlauch.
Vielleicht findet jemand am Code den Fehler.
https://www.herber.de/bbs/user/133567.xlsm
Vielen Dank im Voraus
Peer

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche in Liste
03.12.2019 20:13:26
Matthias
Moin!
Also der Code an sich funktioniert. Sowohl beim Filtern als auch beim Zurücksetzen. Das einzige "Problem" ist, dass er die Daten sortiert haben will. Bei dir sind sie unsortiert. Deshalb bricht er unter Umständen nach dem ersten Treffer ab.
Wenn du auch unsortierte Listen haben willst, dann nimm den Teil hier raus:
                    Else
If UCase(Left(.Cells(LoI, 2), 2)) _
 UCase(Left(txt_OrtSuche, 2)) Then
Exit For
End If

Und auch bei der der UF ( ähnlich wie bei UF_Tag) brachte die Datei mein Excel zur Fehlermeldung.
VG
Anzeige
AW: Suche in Liste
03.12.2019 22:06:21
Peerli
Hallo Markus.
Das ist seltsam, dass es bei dir keine Probleme gibt und die Uf das macht, was es soll.
Welche Fehler bekommst du?
LG
Peee
AW: Suche in Liste
03.12.2019 22:13:48
Matthias
Moin!
Wie letztens schon, kommt bein Start eine Fehlermeldung bzgl. Speicherüberschreitung. Evtl. hast du die UF in einer anderen Version erstellt und dann hier importiert und mein Ex erkennt das und kann es nicht verarbeiten. Aber egal. Schaue mir die Datei und den Code mit OO an. Habe sie dann nachgebaut. Dadurch gehen natürlich kleine Details (Einstellungen in der Controls) verloren.
Also wie geschrieben bei mir läuft der Code fehlerfrei. Lediglich in der Bearbeitung entstehen ungewünschte Ergebnisse. Das lag aber daran, dass die Liste nicht sortiert war. Im Code bricht der Code ab, wenn der Wert nicht mehr mit der Suche übereinstimmt. Spätere Treffer werden demzufolge nicht mehr angezeigt. Das Entfernen der Passage verhindert das. Auch das Rücksetzen geht fehlerfrei. Wenn man einen Buchstaben entfernt, wird die Liste wieder angepasst.
Kommen bei dir Fehlermeldungen oder was klappt nicht? Bzw. beschreibe bitte mal deine Probleme die entstehen. Vllt. kann man es ja auch ohne Originaldatei lösen.
VG
Anzeige
AW: Suche in Liste
04.12.2019 08:26:35
Peer
Moin.
Ich habe mal drei Bilder angehängt, die fortlaufend darstellen, wo mein Problem ist.
Ich habe es noch einmal an einem anderern PC mit Excel 365 versucht, aber kein Erfolg.
Auch deine Fehlermeldung kann ich nicht nachvollziehen, da hierzu bei mir nichts erscheint.
Userbild
Userbild
Es wird nur ein Eintrag "Ingolstadt" gefunden, obwohl er zwei mal vorhanden ist
Userbild
Anscheinend wird beim Leeren mit der Return Taste der Inhalt aus der Tabelle 1 ("Januar") genommen.
LG
Peer
Anzeige
AW: Suche in Liste
04.12.2019 10:39:58
Matthias
Moin!
Also habe mir den Code nochmal angeschaut. Kann ihn wie gesagt nicht im Original nicht testen. Deshalb kann ich nicht ganz nachvollziehen, was wann bzw. wo startet (also auf welcher Seite).
In der Sub txt_OrtSuche_Change ist ein kleiner Fehler, der m.E. die Ansicht bewirkt. Ändere mal die Zuweisung an LoLetzte in der Sub wie folgt ab:
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count)

Da sind jetzt ein paar mehr Punkte drin. Das "Problem" war, dass ohne die Punkte der Code das aktuelle Blatt nimmt. Dort sollte ja aber die Tabelle REiseziele genutzt werden. Da in Spalte A nix steht, wird an LoLetzte nur 1 übergeben. Deswegen gibt es nur eine Suche und auch nur einen Wert. Beim Löschen dann das selbe. Da wird dann nur die Überschrift genommen. Mit den Punkten gilt dort auch die with Anweisung und dein Code greift auf das richtige Blatt zu.
Aber bitte an den Hinweis denken - die Suche funktioniert nur richtig in einer aufsteigend sortierten Liste. Sollt die nicht immer vorliegen, den besagten Codeteil entfernen. Dauert dann ggf. eine Millisekunde (oder auch mehr :-) ) länger aber es sind alle Werte drin.
VG
Anzeige
AW: Suche in Liste
04.12.2019 14:46:40
Peer
Hallo Matthias.
Ich habe mal die Punkte gesetzt. Bei der Suche (Filtern) der Liste funktioniert es und ist auch nachvollziehbar. Danke für den Tipp. Auch das Entfernen eines Buchstaben aktualisiert mir die ListBox korrekt. Nur wenn alle Buchstaben der Liste entfernt wurden, kommt der Inhalt von Tabelle 1.
Da bin ich noch nicht dahinter gestiegen.
Thema Sortierung.
Da ich in VBA noch eine Null bin, habe ich keine Ahnung, wie ich die Sortierung in meinem Code einbeziehen kann. Mit Deinem Tipp des Entfernen der Codezeilen nach

Else
If UCase(Left(.Cells(LoI, 2), 2)) _
 UCase(Left(txt_OrtSuche, 2)) Then
Exit For
End If
wird in der Tat alles korrekt dargestellt.
Aber wie bekomme ich das mit der Sortierung hin? Und wie bekomme ich das mit der ListBox hin, bei Leeren der Sucht-TextBox wieder den kompletten Inhalt in die ListBox?
LG
Peer
Anzeige
AW: Suche in Liste
04.12.2019 15:44:55
Matthias
Moin!
Das mit der Anzeige bei leerer Textbox war mir gar nicht aufgefallen. Ist aber das selbe Problem. Code setzt bei leerer Textbox die RowSource wieder neu. Wenn da aber nicht das gewünschte Blatt mit Namen dabei steht, nimmt er wieder das aktuelle. Und wenn du da im Blatt 1 bist, sind es die Daten. Ändern mal in der selben Sub wie vorhin die if SChleife am Anfang so:
If txt_OrtSuche = "" Then                            ' keine Eingabe in der Textbox
' gesamte Liste zuweisen
lst_Zieladresse.RowSource = Worksheets("Reiseziele").name & "!A1:C" & LoLetzte
Else

Damit steht jetzt wieder der Name davor und die hast die richtige Anzeige.
Bzgl. der Sortierung. Das einfachste wäre natürlich auf die Sortierung zu verzichten. Damit fängst du auch Fehler ab, falls mal jemand etwas am Ende einfügt und nicht sortiert. Zum Sortieren deb Breich markieren. Dann einfach im Menüband Start ziemlich weit rechts schauen. Dort stehe sortieren und filtern. Das anklicken. Dort benutzerdefiniertes Soriteren auswählen (sonst kann man nicht die Spalte auswählen.Dort bei sortieren nach Spalte B auswählen und auf ok drücken.
Mann könnte das auch mit einem Makro machen. Dazu in dem Tabellenblatt das hier reinkopieren.
Wenn du das Blatt verlässt, wird sortiert (habe den Code nur aufgezeichnet und angepasst).
Private Sub Worksheet_Deactivate()
Dim ende As Long
Application.ScreenUpdating = False
ende = Worksheets("Reiseziele").Cells(Worksheets("Reiseziele").Rows.Count, 1).End(xlUp).Row
Worksheets("Reiseziele").Sort.SortFields.Clear
Worksheets("Reiseziele").Sort.SortFields.Add Key:=Range( _
"B1:B" & ende), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Reiseziele").Sort
.SetRange Worksheets("Reiseziele").Range("A1:C" & ende)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
End Sub

VG
Anzeige
AW: Suche in Liste
04.12.2019 18:24:02
Peer
Hallo Matthias.
Die ListBox- Einträge werden jetzt korrekt gefiltert.
Danke dafür.
Gibt es vielleicht noch ein andere Lösung die Sortierung in den Code der UF frm_Suche beim Laden (Initialisieren) mit einzubeziehen?
Ich beabsichtige, bei fehlenden Einträgen, die Möglichkeit zu geben, neue Einträge hinzufügen zu können. Dabei soll der "neue" Eintrag in die ListBox gleich eingetragen werden. Entweder über das Hinzufügen des Eintrags in die dazugehörige Tabelle und dann die ListBox neu zu initialisieren. Oder auch umgekehrt über den Eintrag in die ListBox direkt einzufügen und beim Schließen der UF die Tabelle "Reiseziele" zu aktualisieren.
Welche Lösung die bessere ist, kann ich noch nicht einschätzen.
Aber in jeden der geschilderten Fälle ist der Eintrag erstmal am Ende der Tabelle/ListBox und sollte hier gleich sortiert werden. Bei deiner Lösung wird erst durch erneutem Laden der UF frm_Suche sortiert, oder?
LG
Peer
Anzeige
AW: Suche in Liste
04.12.2019 18:48:59
Peer
Hallo Matthias.
Die ListBox- Einträge werden jetzt korrekt gefiltert.
Danke dafür.
Gibt es vielleicht noch ein andere Lösung die Sortierung in den Code der UF frm_Suche beim Laden (Initialisieren) mit einzubeziehen?
Ich beabsichtige, bei fehlenden Einträgen, die Möglichkeit zu geben, neue Einträge hinzufügen zu können. Dabei soll der "neue" Eintrag in die ListBox gleich eingetragen werden. Entweder über das Hinzufügen des Eintrags in die dazugehörige Tabelle und dann die ListBox neu zu initialisieren. Oder auch umgekehrt über den Eintrag in die ListBox direkt einzufügen und beim Schließen der UF die Tabelle "Reiseziele" zu aktualisieren.
Welche Lösung die bessere ist, kann ich noch nicht einschätzen.
Aber in jeden der geschilderten Fälle ist der Eintrag erstmal am Ende der Tabelle/ListBox und sollte hier gleich sortiert werden. Bei deiner Lösung wird erst durch erneutem Laden der UF frm_Suche sortiert, oder?
LG
Peer
Anzeige
AW: Suche in Liste
04.12.2019 19:25:34
Matthias
Moin!
Also mein Vorschlag wäre, immer gleich in die Liste EIntragen. Mit den hinzugefügten WErten willst du ja später weiterarbeiten. Dann hast du aber sonst ggf. unterschiedliche Daten in der UF als im Blatt - nicht gut. Dann sortiere deine Liste am Anfang vom Initialize und Lade sie dann. Am schönsten wäre natürlich, du lagerst den Code dazu in eine Sub aus und rufst die im INitialize oder nach dem Hinzufügen auf. Bin nicht so der Fan, das Initialize erneut aufzurufen. Weil je nachdem, was da drin steht, können ggf. Variablenwerte neu gesetzt bzw. verloren gehen. Ist jetzt bei dir nicht der Fall aber wenn man sich das mal angewöhnt, könnte man auch auf der Nase landen.
Hier aber mal alles im initialize. Könntest den Code aber auch 1 zu 1 in eine Sub packen und die dann je nachdem aufrufen.
Private Sub UserForm_Initialize()
'* H. Ziplies                                     *
'* 30.10.10                                       *
'* erstellt von HajoZiplies@web.de                *
'* http://Hajo-Excel.de
Application.ScreenUpdating = False
With Worksheets("Reiseziele")
LoLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 1)), .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows. _
Count)
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range( _
"B1:B" & LoLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With .Sort
.SetRange Worksheets("Reiseziele").Range("A1:C" & LoLetzte)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
' letzte belegte Zeile unabhängig von Excelversion für Spalte A (1)
' Adressbereich der Listbox zuweisen
lst_Zieladresse.RowSource = .name & "!A1:C" & LoLetzte
lst_Zieladresse.ColumnCount = 3  ' Spaltenanzahl der Listbox einstellen
End With
End Sub

VG
Anzeige
AW: Suche in Liste
05.12.2019 16:21:01
Peer
Hallo Matthias.
Das ist genau das, was ich gesucht habe.
Den Tipp nehme ich dankend an und ist schon umgesetzt.
Nur das Setzen einer eigenen Sub scheiterte daran, dass LoLetzte laut Debugger definiert sein muss.
Daher habe ich sie in den Code vom UF gelegt.
LG
Peer

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige