Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
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
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?

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
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

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige