Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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
Suche in mehreren Worksheets
Werner
Hallo, liebe Freunde,
habe folgendes Problem: Ein Makro soll in mehreren Worksheets mit der Find-Anweisung nach
einem bestimmten Begriff suchen und ihn, wenn gefunden, mit "FindNext" erneut finden, sooft der
Begriff in den Worksheets auftaucht. Wie das geht, ist für mich und noch viel mehr für euch unproblema-
tisch (der Code steht in einem Buch, von wo ich nicht einfach abschreiben möchte, um ihn hier ins
Forum zu stellen).
Nur soll der Code aber so funktionieren, dass jedesmal, wenn ein Begriff gefunden wurde, die gefundene Zelle markiert wird, was
ja mit der Goto-Anweisung funktioniert. Nachdem der erste Suchbegriff gefunden ist, will ich abfragen,
ob der Anwender einen weiteren Begriff suchen will. Das geht zwar mit einer "MsgBox", aber wenn ich eine
"MsgBox" in den Code einbaue, kann ich die erste Fundstelle nicht sehen, auch wenn die Suche erfolgreich war, weil sofort das "MsgBox"-Fenster erscheint und auf eine Benutzereingabe wartet.
Die Suche im Archiv führte nur zu folgenden Vermutungen: Ist dieses Problem vielleicht mit einer Userform
lösbar? Und wenn ja, dann wie? Spielt "Show modal und/oder "DoEvents" bei der Lösung eine Rolle?
Für Vorschläge wäre ich sehr dankbar! Werner R.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Suche in mehreren Worksheets
19.02.2011 13:02:36
Gerd

der Code steht in einem Buch, von wo ich nicht einfach abschreiben möchte, um ihn hier ins
Forum zu stellen).

Naja Werner,
bei den ca. 10 Codezeilen hättest Du dir nichts abgebrochen. :)
Schleife über alle Tabellenblätter:
Dim WS as Worksheet
For Each WS in Thisworkbook.Worksheets
'................
Set ... = WS. ..... . Find(.................)
'................
Set ... = WS. ..... . FindNext(.................)
'................
Next
Was Du zusätzlich benötigst, hängt davon ab, was Du wo ausgeben willst, wenn Du den Buch-Code eingearbeitet hast.
Gruß Gerd
Anzeige
Dank!, jetzt noch der Code
19.02.2011 13:22:45
Werner
Hallo Gerd,
danke für deinen Hinweis!! Nützlich daran ist der Gedanke, dass man die Fundstellen auch ausgeben kann.
Ich will sie allerdings dennoch nicht ausgeben, sondern mir jede Fundstelle ansehen, bevor ich entscheide, ob ich den Makro weitersuchen lasse.
Du hast recht, der Code ist nicht so besonders, dass er durch besonders schützenswert wäre. Er lautet wie folgt:
Sub MySearch
Dim strFind As String
Dim ws As Worksheet
Dim rng As Range
Dim strAddress As String
strFind = InputBox("Suchbegriff eingeben:")
If strFind = "" Then
Exit Sub
Else
For Each ws In Worksheets
Set rng = ws.Cells.Find(strFind)
If Not rng Is Nothing Then
strAddress = rng.Address
Do Application.Goto rng
If MsgBox("Weitersuchen?", 36) = vbNo Then
Exit Sub
Else
Set rng = ws.Cells.FindNext(AFter:=ActiveCell)
End If
Loop While rng.Address strAddress
End If
Next ws
End If
(aus: Monika Weber/Michael Schwimmer, Das Handbuch, Excel-Programmierung, p. 751)
Ich will den Code so umformulieren, dass er nach jedem Fund anhält und ich in dem betreffenden
Worksheet auch sehe, was er gefunden hat. Die MsgBox hindert mich aber daran.
Beste Grüße! Werner R.
Anzeige
AW: Dank!, jetzt noch der Code
19.02.2011 13:39:00
Reinhard
Hallo Werner,
ersetze mal
Do Application.Goto rng
durch
Application.Goto Reference:=rng, scroll:=True
Und zum Buch, schreib doch einfach als Kommentar die Quelle/Autoren/Buch rein.
Dann bist du meiner bescheidenen Meinung nach rechtlich auf der völlig sicheren Seite.
Wenn ich damit falschliege, naja, dann wird dir irgendwann mal ein Richter meinen Denkfehler erläutern *grins*
Sehr anders könnte es sein wenn du kommerziell ein VBA-Buch selbst herausgibst das nur so von Code von beiden wimmelt und du vergisst, weil du grad Minister wirst da die Quellen anzugeben usw.
Achja, wegen der Übersicht könntest du auch so schreiben:
Application.Goto Reference:=cells(rng.row,1), scroll:=True
Gruß
Reinhard
Anzeige
Es liegt an der MsgBox
19.02.2011 13:47:06
Werner
Hallo Reinhard,
Dank auch f. deinen Hinweis!
An der Goto-Anweisung liegt es aber nicht. Die von dir angegebene Syntax der Goto-Anwei-
sung habe ich schon ausprobiert. Das eigentliche Problem besteht darin, dass nach der Goto-Anweisung das MsgBox-Dialogfenster
erscheint und mir keine Zeit bleibt, das Resultat der Goto-Anweisung anzusehen.
Daher meine Frage zu Anfang dieses Thread, ob eine Userform besser als eine MsgBox wäre. Mit
einer Userform bin ich aber nicht zurecht gekommen, weil mir nicht genau bekannt ist, wie man sie
hier einarbeitet.
Grüße Werner R.
Anzeige
AW: Es liegt an der MsgBox
19.02.2011 14:21:42
Gerd
Hallo Werner,
ich muss jetzt erst mal zum Optiker, damit ich künfitg die aktive Zelle wieder besser erkenne. :-)
Bis später.
P.S.: Den mir unbekannt gewesenen Mustercode hatte ich nicht bewertet, sondern
  • nur meine Vermutung
    hinsichtlich der Anzahl der Codezeilen geäußert.
    Gruß Gerd
  • 301 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige