4k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo und Hilfe :)

Habe folgende(s) Problem(e):Ich würde zu meiner Listbox1 gerne ein Suchfeld einfügen. Soll heißen:

-Wenn jemand einen Buchstaben oder Kombination aus Buchstaben eingibt, soll eine Auswahl in der Listbox angezeigt werden
(hintergrund ist eine Kundentabelle. In der Listbox1 sollen Nachnamen angezeigt werden).
Ich habe Google etliche Tage bemüht, finde aber einfach nichts wie ich das machen könnte :(

Zudem habe ich noch ein Problem nr. 2: Wenn ich auf "neuen Eintrag gehe" setzt er mir in
Zeile 188 zwar einen "neuen Eintrag" aber ich kann dort nichts speichern und zu allem
Überfluss sind in den darauf folgenden Spalten (188;B,188;C...usw) schon Daten hinterlegt-> quasi hat
er einen neuen Eintrag in einer falschen Spalte erstellt (aber warum?)
Habe jetzt ein wenig rumprobiert....irgendwie stoppt alles bei 188...
obwohl er eigentlich in die letzte Spalte gehen sollte

Wäre überaus dankbar für Hilfe.
Hier mein wirrer Code



LG Susi

23 Antworten

0 Punkte
Beantwortet von
Was genau bedeutet das i in dem code?

Muss ich nach Worksheets den namen meiner Excel-Tabelle einfügen?

Danke für sämtliche Hilfe

For i = 2 To Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
If Left(LCase(Worksheets("Tabelle1").Cells(i, 1)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Tabelle1").Cells(i, 1)
Next i
0 Punkte
Beantwortet von
Was genau bedeutet das i in dem code?

Muss ich nach Worksheets den namen meiner Excel-Tabelle einfügen?

Danke für sämtliche Hilfe

For i = 2 To Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
If Left(LCase(Worksheets("Tabelle1").Cells(i, 1)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Tabelle1").Cells(i, 1)
Next i
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Susanne,

mit der Variable i werden die Zeilen durchlaufen, in denen die Adressen steht.
Du musst in deinem Code i noch dimensionieren, da du da Option Excplicit gewählt hast.
Also so:

Private Sub CommandButton1_Click()
Dim strSuche As String
Dim lngLang As Long
Dim i as Long

strSuche = TextBox1.Value
lngLang = Len(strSuche)

'Inhalt der Listbox1 löschen
UserForm1.ListBox1.Clear

'Nur Daten aus Spalte A in Listbox eintragen, deren Anfang dem Suchbegriff entspricht; durch LCase wird Groß-/Kleinschreibung ignoriert
For i = 2 To Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Row
If Left(LCase(Worksheets("Tabelle1").Cells(i, 1)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Tabelle1").Cells(i, 1)
Next i

End Sub


Du kannst statt
Worksheets("Tabelle1").Cells(i, 1)

auch
ActiveWorkbook.Worksheets("Tabelle1").Cells(i, 1)

oder
ThisWorkbook.Worksheets("Tabelle1").Cells(i, 1)

in den Code schreiben.

Gruß

M.O.
0 Punkte
Beantwortet von
Vielen vielen lieben Dank für deine Hilfe M.O.

Leider besteht mein Problem weiter :(
Nun bekomme ich einen: Laufzeitfehler 9 - index außerhalb des Gültigkeitsbereiches.

Ich möchte doch nur Spalte A und B durchsuchen :(

(Spalte A= Nachnamen Spalte B= Vornamen. Wenn ich am Telefon sitze und den Namen nicht richtig vertshe, sollen mich auch die ersten 2-3
Buchstaben ans Ziel führen)
Oder wenn ich nur nach "B" suche...
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Susanne,

welche Codezeile wird denn bei der Fehlermeldung markiert?

Ich möchte doch nur Spalte A und B durchsuchen

Bei meinem Beispiel-Code wird nur die Spalte A durchsucht.
Du müsstest die Zeile
If Left(LCase(Worksheets("Tabelle1").Cells(i, 1)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Tabelle1").Cells(i, 1)

dann z.B. in
If Left(LCase(Worksheets("Tabelle1").Cells(i, 1)), lngLang) = LCase(strSuche) Or Left(LCase(Worksheets("Tabelle1").Cells(i, 2)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Tabelle1").Cells(i, 1)

ändern (hier wird dann nur der Nachname angezeigt)..

Ansonsten lade mal eine Beispieldatei mit ein paar Dummy-Daten auf einen Hoster deiner Wahl hoch (z.B. hier), dann könnte man sich das mal ansehen.

Gruß

M.O.
0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo Susanne,

Bin mir nicht ganz sicher, ob ich die Problemstellung richtig verstanden habe, würde alternativ vorschlagen die Hyperlinkfunktion als Matchcode einzusetzen:

z.B. für Spalte A
Formel in F1:
=HYPERLINK("#" & ADRESSE(VERGLEICH(G1&"*";A:A;0);1;1))
Suchbegriff in G1

für Spalte B
Formel in F2:
=HYPERLINK("#" & ADRESSE(VERGLEICH(G2&"*";A:A;0);2;1))
Suchbegriff in G2

Bei Eintrag des Suchbegriffes und anschließendes anklicken der Formel wird die entsprechende Zelle in Spalte A bzw. B angesprungen.

Gruß
Paul1
0 Punkte
Beantwortet von
Hallo nochmals,

Die Formel für Spalte B sollte lauten:

=HYPERLINK("#" & ADRESSE(VERGLEICH(G2&"*";B:B;0);2;1))

Gruß
Paul1
0 Punkte
Beantwortet von
Danke Paul für deine Unterstützung - leider nicht das was ich benötige.


Lieber M.O.,
Habe nun meinen Code geändert - dennoch bekomme ich den Fehler
Laufzeitfehler '9' - Index außerhalb des gültigen Bereichs

und einen Verweis auf Zeile
For i = 2 To ThisWorkbook.Worksheets("Tabelle1").Cells(i, 1).Cells(Rows.Count, 1).End(xlUp).Row




Was mir noch aufgefallen ist. Wenn Namen in der Spalte "last-Name" doppelt vorkommen, wird nur der Erste angezeigt (in der List-Box). Im Klartext: Wenn der Nachname doppelt vorkommt, so wird nur einer (der erste in der Spalte) angezeigt(List-Box).


Hier eine Muster-Excel-Datei:
Muster.xlsm
www27.zippyshare.com/v/jfOXwWiD/file.html
0 Punkte
Beantwortet von
Hallo Susanne,

schau mal:

http://p.aon.at/u/772405/?key=NWCTMW7F7WC4&share=39440


Wenn Du in der Userform z.B. unter Bezeichnung Ver* (*=Platzhalter) eingibst und den Button Filter setzen betätigst werden in der Listbox auch die doppelten Verschaubungen angezeigt.

Hoffe es entspricht Deinen Vorstellungen.

Das ganze wäre natürlich an Deine Erfordernisse anzupassen

Gruß
Paul1
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Susanne,

du musst auch im Makro den Namen "Tabelle1" durch "Vorlage Kontakt-Liste" ersetzen. Auch löschst du den Inhalt der falschen Listbox. So funktioniert das Makro:

Private Sub CommandButton100_Click()
Dim strSuche As String
Dim lngLang As Long
Dim i As Long

strSuche = TextBox100.Value
lngLang = Len(strSuche)

'Inhalt der Listbox1 löschen
UserForm1.ListBox1.Clear

'Nur Daten aus Spalte A in Listbox eintragen, deren Anfang dem Suchbegriff entspricht; durch LCase wird Groß-/Kleinschreibung ignoriert
For i = 2 To ThisWorkbook.Worksheets("Vorlage Kontakt-Liste").Cells(Rows.Count, 1).End(xlUp).Row
If Left(LCase(Worksheets("Vorlage Kontakt-Liste").Cells(i, 1)), lngLang) = LCase(strSuche) Or Left(LCase(Worksheets("Vorlage Kontakt-Liste").Cells(i, 2)), lngLang) = LCase(strSuche) Then UserForm1.ListBox1.AddItem Worksheets("Vorlage Kontakt-Liste").Cells(i, 1)

Next i

End Sub


Gruß

M.O.
...