Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA suchen und in Listbox ausgeben

VBA suchen und in Listbox ausgeben
27.07.2017 09:36:56
Markus
Hallo zusammen,
ich habe schon einige Beiträge hier gefunden aber leider noch nichts passendes.
Ich möchte folgendes lösen:
Ich habe eine User Form, in dieser ist ein Text Feld, ein Suchen Button und eine Listbox.
Wenn ich den Suchen Button drücke soll der Text der im Textfeld eingegeben ist in einer Tabelle in mehreren Spalten gesucht werden und alle Ergebnisse in der Listbox angezeigt werden und zwar die kompletten Spalten.
Danke schon im Voraus für eure Hilfe!
Gruß
Markus
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA suchen und in Listbox ausgeben
27.07.2017 10:02:29
Matthias
Hallo
Was soll man mit einer Bsp-Datei die nicht den realen Bedingungen entspricht?

  • chkPart gibts nicht.

  • Sheets("Daten") gibt es nicht

  • einzulesende Werte gibt es auch nicht.


Gruß Matthias
Anzeige
AW: VBA suchen und in Listbox ausgeben
31.07.2017 06:17:48
Markus
Hallo Mathias,
ok dann hier ein neuer Versuch.....
Ich habe im Tabellenblatt "Suchen" einen Button mit dem ich die UserForm "Suchfunktion" öffne.^
Dort habe ich eine Textbox, einen Command Button und eine Listbox.
Wenn ich in der Textbox einen Begriff eingebe und anschliessend den Suchen Button drücke soll in dem Tabellenblatt "Daten" die Spalten A bis F nach diesem Begriff durchsucht werden und einem Treffer die komplette Zeile in der Listbox ausgegeben werden.

Die Datei https://www.herber.de/bbs/user/115140.xlsm wurde aus Datenschutzgründen gelöscht


VG
Markus
Anzeige
AW: VBA suchen und in Listbox ausgeben
31.07.2017 07:35:26
Crazy
Hallo
das könnte so aussehen
https://www.herber.de/bbs/user/115141.xlsm
da werden jetzt immer 2 Einträge angezeigt wenn nach der Stadt gesucht wird
du solltest es auf 1 Suchspalte begrenzen
MfG Tom
AW: VBA suchen und in Listbox ausgeben
31.07.2017 08:16:57
Markus
Hallo Tom,
vielen Dank, genau so wollte ich das haben!
Aber warum sollte ich es auf eine Suchspalte begrenzen?
Ich müsste sogar in den Spalten A bis H suchen und hab den Code umgeschrieben.
Dann findet es es zwar die Zeilen und schreibt sie in die Listbox aber die letzten beiden Spalten werden nicht angezeigt, was habe ich falsch gemacht?
Option Explicit
' Steuerelementer des UF
' Textbox - Name = txtSearch
' Listbox - Name = Listbox1
' CheckBox - Name = chkPart
' CheckBox - Name = chkCase
' CommandButton - Name = cmdSearch
' CommandButton - Name = cmdClose
Private Sub cmdClose_Click()
Unload Me
End Sub

Private Sub cmdSearch_Click()
Dim c As Range
Dim rngBereich As Range
Dim lngAnzahl As Long
Dim strFirst As String
With Sheets("Daten")
Set rngBereich = .Columns("A:H")
Set c = rngBereich.Find(txtSearch, LookIn:=xlValues, lookat:=xlPart)
If Not c Is Nothing Then
strFirst = c.Address
Do
ListBox1.AddItem .Cells(c.Row, 1)
lngAnzahl = ListBox1.ListCount
ListBox1.List(lngAnzahl - 1, 1) = .Cells(c.Row, 2)
ListBox1.List(lngAnzahl - 1, 2) = .Cells(c.Row, 3)
ListBox1.List(lngAnzahl - 1, 3) = .Cells(c.Row, 4)
ListBox1.List(lngAnzahl - 1, 4) = .Cells(c.Row, 5)
ListBox1.List(lngAnzahl - 1, 5) = .Cells(c.Row, 6)
ListBox1.List(lngAnzahl - 1, 6) = .Cells(c.Row, 7)
ListBox1.List(lngAnzahl - 1, 7) = .Cells(c.Row, 8)
Set c = rngBereich.FindNext(c)
Loop While Not c Is Nothing And c.Address  strFirst
End If
End With
End Sub

Private Sub TextBox1_Change()
End Sub
'

Private Sub txtSearch_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'   If KeyCode = 13 Then cmdSearch_Click
'End Sub
Private Sub UserForm_Initialize()
With ListBox1
.Clear
.ColumnCount = 6
.ColumnWidths = "75;75;75;75;75;75"
End With
End Sub

Anzeige
AW: VBA suchen und in Listbox ausgeben
31.07.2017 08:59:08
Crazy
Hallo
dann schau doch mal was im
Userform_initialize()
steht
da werden der Listbox nur 6 Spalten zugewiesen
das musst du dann entsprechend ändern genau wie die Spaltenbreite
pass nur auf dass du nicht über 10 Spalten hinausgehst
das verträgt AddItem nämmisch nisch ;-)
MfG Tom
Anzeige
AW: VBA suchen und in Listbox ausgeben
31.07.2017 09:49:08
Markus
Hallo Tom,
oh jetzt weiß ich auch was das bedeutet und die 75 der Abstand ist.
Ich habe es angepasst und funktioniert.
Vielen Dank!!!!
Gruß
Markus
;
Anzeige
Anzeige

Infobox / Tutorial

VBA suchen und in Listbox anzeigen


Schritt-für-Schritt-Anleitung

  1. Erstelle eine UserForm:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge eine neue UserForm hinzu, indem du mit der rechten Maustaste auf dein Projekt klickst und „UserForm einfügen“ wählst.
  2. Gestalte die UserForm:

    • Füge ein Textfeld (Textbox) hinzu, um den Suchbegriff einzugeben. Nenne es txtSearch.
    • Füge einen Button hinzu, um die Suche zu starten. Nenne ihn cmdSearch.
    • Füge eine ListBox hinzu, um die Ergebnisse anzuzeigen. Nenne sie ListBox1.
  3. Code für die Suchfunktion:

    • Doppelklicke auf den Button cmdSearch und füge den folgenden Code ein:
    Private Sub cmdSearch_Click()
       Dim c As Range
       Dim rngBereich As Range
       Dim lngAnzahl As Long
       Dim strFirst As String
       With Sheets("Daten")
           Set rngBereich = .Columns("A:H")
           Set c = rngBereich.Find(txtSearch, LookIn:=xlValues, lookat:=xlPart)
           If Not c Is Nothing Then
               strFirst = c.Address
               Do
                   ListBox1.AddItem .Cells(c.Row, 1)
                   lngAnzahl = ListBox1.ListCount
                   ListBox1.List(lngAnzahl - 1, 1) = .Cells(c.Row, 2)
                   ListBox1.List(lngAnzahl - 1, 2) = .Cells(c.Row, 3)
                   ListBox1.List(lngAnzahl - 1, 3) = .Cells(c.Row, 4)
                   ListBox1.List(lngAnzahl - 1, 4) = .Cells(c.Row, 5)
                   ListBox1.List(lngAnzahl - 1, 5) = .Cells(c.Row, 6)
                   ListBox1.List(lngAnzahl - 1, 6) = .Cells(c.Row, 7)
                   ListBox1.List(lngAnzahl - 1, 7) = .Cells(c.Row, 8)
                   Set c = rngBereich.FindNext(c)
               Loop While Not c Is Nothing And c.Address <> strFirst
           End If
       End With
    End Sub
  4. ListBox initialisieren:

    • Füge den folgenden Code in das UserForm_Initialize-Ereignis ein, um die Spalteneinstellungen der ListBox festzulegen:
    Private Sub UserForm_Initialize()
       With ListBox1
           .Clear
           .ColumnCount = 8
           .ColumnWidths = "75;75;75;75;75;75;75;75"
       End With
    End Sub
  5. Teste die UserForm:

    • Fülle die Tabelle „Daten“ mit Beispieldaten in den Spalten A bis H.
    • Starte die UserForm und gib einen Suchbegriff in das Textfeld ein. Klicke auf den Suchen-Button und beobachte die Ergebnisse in der ListBox.

Häufige Fehler und Lösungen

  • Problem: Die letzten Spalten werden nicht angezeigt.

    • Lösung: Überprüfe den Code im UserForm_Initialize, stelle sicher, dass die ColumnCount auf die richtige Anzahl (hier 8) gesetzt ist.
  • Problem: Die ListBox zeigt doppelte Einträge.

    • Lösung: Stelle sicher, dass der Suchbereich (Range) und die Suchparameter korrekt eingestellt sind.

Alternative Methoden

  • Anstelle einer ListBox kannst du auch ein Excel-Datenblatt nutzen, um die Suchergebnisse anzuzeigen. Dies kann besonders nützlich sein, wenn du mit größeren Datenmengen arbeitest.

  • Verwende die Filter-Funktion in Excel VBA, um gezielte Suchergebnisse in einer Tabelle darzustellen.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die „excel vba sucht und in listbox anzeigt“-Funktion in einer realen Anwendung nutzen kannst:

Sub SuchBeispiel()
    ' Beispiel zum Suchen eines Wertes in einer Tabelle
    Dim Suchbegriff As String
    Suchbegriff = InputBox("Gib den Suchbegriff ein:")
    ' Hier könnte der Code zur Ausführung der Suchfunktion stehen.
End Sub

Tipps für Profis

  • Nutze die Find-Methode effizient, indem du die LookIn- und LookAt-Parameter anpasst, um die Suchergebnisse zu optimieren.
  • Experimentiere mit der ListBox-Formatierung, um die Benutzeroberfläche ansprechender zu gestalten.
  • Berücksichtige die Implementierung von zusätzlichen Filteroptionen in deiner VBA Suchfunktion, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Spalten in einer ListBox ändern?
Du kannst die Anzahl der Spalten in der ListBox anpassen, indem du die ColumnCount-Eigenschaft im UserForm_Initialize-Ereignis änderst.

2. Was mache ich, wenn die Suche keine Ergebnisse liefert?
Überprüfe die eingegebenen Suchbegriffe und stelle sicher, dass sie genau mit einem der Werte in den Spalten übereinstimmen. Achte auch auf Groß- und Kleinschreibung, wenn die chkCase-Option aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige