Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Userform: Suche via Textbox

Forumthread: VBA Userform: Suche via Textbox

VBA Userform: Suche via Textbox
18.01.2018 15:23:11
Harald
Hallo zusammen,
ich arbeite momentan an einer Userform zur übersichtlichen Darstellung einer Projektdatenbank. Diese Datenbank besteht aus Projekten, die sich jeweils in unterschiedlichen Stadien befinden. Jedes Stadium hat dabei ein eigenes Tabellenblatt.
Bis jetzt läuft es mit der Userform sehr gut, ich kann Projekte anzeigen / bearbeiten und in den jeweiligen Stadien umherverschieben lassen. Jetzt möchte ich eine Stufe weitergehen und eine Suche einbauen - hier hakt es und ich weiß nicht, warum.
So sieht meine Userform aus: https://i.imgur.com/EUhgp8s.png
Folgenden Code habe ich nun bei der txt_Suche als change hinterlegt, um jeweils in Spalte B jedes Blattes (dort stehen die Projektkürzel) zu suchen und diese Projektkürzel in die Listbox (lst_Projekt_Anfragen) zu speichern:
Private Sub txt_Suche_Change()
Dim wb As Workbook, shanfrage As Worksheet
Dim suchtext As Variant, i As Integer
'Liste leeren
Me.lst_Projekt_Anfragen.Clear
'Suche in allen Tabellenblättern nach Übereinstimmungen, sobald 3 Zeichen eingegeben wurden
If Len(txt_Suche.Value) > 2 Then
For i = 2 To Sheets.Count
Set suchtext = Sheets(i).Range("B:B").Find(What:=txt_Suche.Value, Lookat:=xlPart, LookIn:= _
xlValues)
Next i
Do While suchtext >= 1
Me.lst_Projekt_Anfragen.AddItem suchtext
i = i + 1
Loop
End If
End Sub

Ich erhalte ohne die Längen-Beschränkung eine Fehlermeldung "Überlauf", was wohl darauf zurückzuführen ist, dass er zuviele Daten laden muss. Wenn ich die Längenbeschränkung eingebe und bspw. nach "MRP" suche (das Projekt gibt es auf jeden Fall) erhalte ich in der Zeile
Do While suchtext >= 1

den Laufzeitfehler 91, die Objektvariable oder With-Blockvariable sei nicht festgelegt. Ich tüftel da nun schon eine ganze Weile dran herum, kann aber auch im Internet keinen passenden Code finden, der mir weiterhelfen würde. Die meisten suchen innerhalb einer vorhandenen Listbox - ich möchte die Listbox aber mit den Suchergebnissen aus der Textbox füllen.
Kann mir hier eventuell jemand weiterhelfen, woran der Code scheitert, ob die Suche so überhaupt funktionieren kann, oder ob ich völlig falsch liege?
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Userform: Suche via Textbox
18.01.2018 17:12:06
Luschi
Hallo Harald,
da fehlen einige Vba-Befehle, bevor dieser Code läuft:
- jeder Find-Bbefehl findet nur den 1. vorhandenen Wert im Suchbereich
- nach diesem Befehl muß sofort die Prüpfung erfolgen, ob die Suche erfolgreich war
  (Stichwort: Is Nothing)
- ansonsten zum nächsten Tabellenblatt
- gibt es mehrere Stellen im Suchbereich der Tabelle
- geht es mit FindNext weiter (siehe Vba-Hilfe)
- suchtext ist die gefundene Zelle im Tabellenblatt (also ein Object von Typ Range)
- und keine Integer-Variable (so wie die 1)
Mache bite eine kleine Demodatei und die Hilfeunterstützung geht weiter.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Userform: Suche via Textbox
19.01.2018 06:33:53
Harald
Guten Morgen und vielen Dank für die Antwort Luschi!
Dein Input hilft mir bereits enorm weiter. Ich habe bisher noch nie mit den Find-Funktionen gearbeitet. Ich werde mich da hinterklemmen und mir die FindNext Funktion anschauen. Wenn dann noch Fragen offen bleiben, lade ich ein Demofile hoch.
lg
Anzeige
AW: VBA Userform: Suche via Textbox
19.01.2018 08:05:02
Harald
Das ging schneller, als erwartet. Mit dem nachfolgenden Code habe ich die Suche realisieren können:
If Len(txt_Suche.Value) > 2 Then
For i = 2 To Sheets.Count
With wb.Sheets(i).Range("B:B")
Set suchtext = .Find(What:=txt_Suche.Value, lookat:=xlPart, LookIn:=xlValues)
If Not suchtext Is Nothing Then
firstAddress = suchtext.Address
Do
Me.lst_Projekt_Anfragen.AddItem suchtext
Set suchtext = .FindNext(suchtext)
If suchtext Is Nothing Then
GoTo Ende:
End If
Loop While Not suchtext Is Nothing And suchtext.Address  firstAddress
End If
Ende:
End With
Next i
End If

Danke an Luschi und den Hinweis auf .FindNext in der VBA Hilfe (https://msdn.microsoft.com/de-de/VBA/Excel-VBA/articles/range-findnext-method-excel).
lg
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Effiziente Suche in einer VBA Userform mit Textbox


Schritt-für-Schritt-Anleitung

  1. Erstelle eine Userform: Beginne mit der Erstellung einer Userform in Excel, die eine Textbox (txt_Suche) für die Suche und eine Listbox (lst_Projekt_Anfragen) zur Anzeige der Ergebnisse enthält.

  2. Füge den VBA-Code hinzu: Du kannst folgenden Code in das Change-Ereignis der Textbox einfügen, um die Suche zu realisieren:

    Private Sub txt_Suche_Change()
       Dim wb As Workbook
       Dim suchtext As Range
       Dim i As Integer
       Dim firstAddress As String
    
       ' Liste leeren
       Me.lst_Projekt_Anfragen.Clear
    
       ' Suche in allen Tabellenblättern nach Übereinstimmungen, sobald 3 Zeichen eingegeben wurden
       If Len(txt_Suche.Value) > 2 Then
           For i = 2 To Sheets.Count
               With Sheets(i).Range("B:B")
                   Set suchtext = .Find(What:=txt_Suche.Value, Lookat:=xlPart, LookIn:=xlValues)
                   If Not suchtext Is Nothing Then
                       firstAddress = suchtext.Address
                       Do
                           Me.lst_Projekt_Anfragen.AddItem suchtext
                           Set suchtext = .FindNext(suchtext)
                       Loop While Not suchtext Is Nothing And suchtext.Address <> firstAddress
                   End If
               End With
           Next i
       End If
    End Sub
  3. Testen: Starte die Userform und gib in die Textbox ein, um die Suchergebnisse in der Listbox anzuzeigen.


Häufige Fehler und Lösungen

  • Überlauf-Fehler: Dieser Fehler kann auftreten, wenn zu viele Daten geladen werden. Stelle sicher, dass du die Suche auf sinnvolle Eingaben beschränkst (mindestens 3 Zeichen).

  • Laufzeitfehler 91: Dies geschieht, wenn suchtext nicht korrekt gesetzt wurde. Achte darauf, dass der Find-Befehl einen Wert zurückgibt. Verwende If Not suchtext Is Nothing Then, um die Existenz des Objekts zu überprüfen.


Alternative Methoden

  • Verwendung von Google Forms: Wenn du eine benutzerfreundliche Oberfläche benötigst, kannst du auch Google Forms für bedingte Fragen verwenden, um Informationen zu sammeln. Dies ist eine Alternative, wenn du keine VBA-Kenntnisse hast.

  • VBA GUI: Du kannst eine VBA GUI (Graphical User Interface) erstellen, die mehr Funktionen bietet, wie Filteroptionen oder das Sortieren von Ergebnissen.


Praktische Beispiele

  • Projektdatenbank: In einem Projektmanagement-Tool kannst du die oben beschriebene Suche nutzen, um schnell auf Projektkürzel zuzugreifen.

  • Datenbankabfragen: Verwende ähnliche Techniken in einer vbs userform, um Datenbankabfragen effizient zu gestalten.


Tipps für Profis

  • Optimierung der Suche: Wenn du die Suche optimieren möchtest, kannst du die xlWhole-Option für die Lookat-Eigenschaft verwenden, um exakte Übereinstimmungen zu finden.

  • Verwendung von Excel-VBA-Select für Textbox: Wenn du die Auswahl innerhalb der Textbox steuern möchtest, kannst du den Befehl excel vba select textbox verwenden, um den Cursor an eine bestimmte Position zu setzen.


FAQ: Häufige Fragen

1. Wie kann ich die Suche auf mehrere Spalten erweitern?
Du kannst die Find-Methode für mehrere Bereiche in einer Schleife aufrufen, um in verschiedenen Spalten nach Übereinstimmungen zu suchen.

2. Was kann ich tun, wenn die Listbox keine Ergebnisse anzeigt?
Überprüfe deinen Code und sicherstelle, dass die Suchbedingungen korrekt sind. Teste die Eingabe in der Textbox und die Daten in deinen Tabellenblättern.

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