Suchfunktion VBA

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
InputBox MsgBox
Bild

Betrifft: Suchfunktion VBA
von: Alwin
Geschrieben am: 06.07.2015 16:12:14

Hallo zusammen,
ich habe in eine Excel ein Makro eingefügt, das ich im Internet gefunden habe. Mit diesem Makro kann man nach Suchbegriffen in der gesamten Datei suchen. Es funktioniert auch (fast) einwandfrei. Die Suche beginnt immer auf dem ersten Tabellenblatt - auch wenn ich gerade auf dem 5. Tabellenblatt bin und dort auch das erste Ergebnis ist, wonach ich suche. Kann mir hierbei jemand weiterhelfen?
Das Makro sieht wie folgt aus:
Option Explicit
Global SSearch As String


Public Sub SearchAllTables()
 Dim ws As Worksheet
 Dim c
 Dim firstAddress As String
 Dim secAddress
 Dim GFound As Boolean
 Dim GWeiter As Boolean
 GWeiter = False
 GFound = False
anf:
 SSearch = InputBox("Suchen nach:", "Stichwort-Suche / Suchfunktion", SSearch)
 If SSearch = "" Then
 End
 End If
weiter:
 For Each ws In Worksheets
 'ws.Select
 With ws.Cells
 Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
 If Not c Is Nothing Then
 GFound = True
 ws.Select
 c.Select
 firstAddress = c.Address
 If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbYes Then
 Do
 Set c = .FindNext(c)
 secAddress = c.Address
 If c.Address = firstAddress Then
 Exit Do
 End If
 c.Select
 If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then
 GWeiter = True
 GoTo ende
 End If
 Loop While Not c Is Nothing And secAddress <> firstAddress And c.Address <> firstAddress
 Else
 GWeiter = True
 GoTo ende
 End If
 End If
 End With
 Next ws
ende:
 If GFound = False Then
 If MsgBox("Suchwert nicht gefunden! Neue Suche?", vbInformation + vbYesNo) = vbYes Then
 GoTo anf:
 End If
 Else
 If GWeiter = False Then
 If MsgBox("Es wurden alle in Frage kommenden Suchbegriffe angezeigt! Soll die Suche neu  _
gestartet werden?", vbInformation + vbYesNo) = vbYes Then
 GoTo weiter
 End If
 End If
 End If
 End Sub
Vielen Dank im Voraus
Alwin

Bild

Betrifft: AW: Suchfunktion VBA
von: Michael
Geschrieben am: 06.07.2015 18:26:34
Hallo Alwin,
man *könnte* den Code ändern, so daß zuerst das aktive Blatt durchsucht wird, aber das macht den Code nicht übersichtlicher.
Vorschlag 1: Du kopierst das ganze Ding und benennst die Kopie um, etwa auf SearchThisTable und wirfst alles raus, was sich *nicht* auf das gerade aktive Blatt bezieht oder
Vorschlag 2: Du verwendest einfach die Excel-Suchfunktion.
Ich würde insgesamt letzteres vorziehen, denn Excel sucht ja auf Wunsch ("Optionen" im Suchdialog) sowohl im aktiven Blatt als auch in der ganzen Datei, und ich sehe keinen Grund, nicht eine *eingebaute* Funktion zu verwenden, die nämlich genau das tut, was Du brauchst.
Sagen wir mal so: wenn Du die Suche "automatisch" in VBA vornehmen würdest, nach einem Begriff, den die Suche von einem anderen Makro übergeben bekommt oder sich irgendwo aus einer Tabelle holt, sehe ich ein, daß man es "programmieren" muß. Aber wenn Du sowieso den Begriff händisch eingibst, kannst Du gleich Strg+F drücken.
Schöne Grüße,
Michael

Bild

Betrifft: AW: Suchfunktion VBA
von: Daniel
Geschrieben am: 06.07.2015 19:05:30
Hi
Ersetze das:
For Each Ws In Worksheets
durch:

Dim i As Long
Dim j As Long
Dim ws As Worksheet
j = ActiveSheet.Index
...
...
For i = 0 To ActiveWorkbook.Sheets.Count - 1
    Set ws = Sheets((i - 1 + j) Mod ActiveWorkbook.Sheets.Count + 1)
hier wird dann mit dem aktiven Sheet, die Schleife läuft dann weiter bis zum letzen Sheet, startet dann bei Sheet 1 und läuft bis zum Sheet vor dem aktiven.
Funktioniert jetzt so einfach aber nur, wenn du keine Diagrammblätter hast.
Mit Diagrammblättern wirds dann etwas komplizerter.
gruß daniel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "SVERWEIS/INDEX mehrere Treffer"