Word-Suche

Hallo Leute,
Ich bin auf der Suche nach einem Makro, welches in einem geöffneten Word-Dokument zwei Konto-Nr. sucht.
Ich hab schon versucht, das Makro aufzuzeichnen, das klappt aber nicht so richtig, da zwischendurch immer das Meldefenster mit der Fehlermeldung auftaucht.

Kann Jemand helfen ?
Christian

Hallo Christian,

Ich bin auf der Suche nach einem Makro, welches in einem
geöffneten Word-Dokument zwei Konto-Nr. sucht.

wie soll das Makro die zwei Nummern erkennen?

Ich hab schon versucht, das Makro aufzuzeichnen, das klappt
aber nicht so richtig, da zwischendurch immer das Meldefenster
mit der Fehlermeldung auftaucht.

Was steht in der Fehlermeldung, wann kommt sie?
Was machst du, Bearbeiten–Suchen?

Gruß
Reinhard

Hallo Reinhard,

wie soll das Makro die zwei Nummern erkennen?

Wenn es geht, möchte ich die Nummern fest einprogrammieren in VBA.

Was machst du, Bearbeiten–Suchen?

ja ganz recht, ich gehe über Bearbeiten / Suchen und setze bisher die einzelnen Kontonummern ein. Bei keiner übereinstimmung erscheint jedesmal nach dem Durchsuchen des Dokumentes das Hinweisfenster „Dokument wurde durchsucht, es konnte keine Übereinstimmung festgestellt werden“ - oder so. Dies ist dann vor der nächsten Eingabe mit OK zu bestätigen.
Das nervt !

Daher, Makro, welches das dokument nach allen Kontonummern durchsucht und bei Übereinstimmung zur entsprechenden Stelle springt, ansonsten aber mit der nächsten Kontonummer wieder neu anfängt zu suchen.

(Es handelt sich um das Durchsuchen eines Fehlerprotokolls, daher Keine Meldung erforderlich wenn keine Übereinstimmung vorliegt)

Gruß Christian

wie soll das Makro die zwei Nummern erkennen?

Wenn es geht, möchte ich die Nummern fest einprogrammieren in
VBA.
Daher, Makro, welches das dokument nach allen Kontonummern
durchsucht und bei Übereinstimmung zur entsprechenden Stelle
springt, ansonsten aber mit der nächsten Kontonummer wieder
neu anfängt zu suchen.

Hallo Christian,

wie wäre es mit diesem Ansatz?
PS: Wie fit bist du in Vba, kannst du Modul1, Modul2 usw erzeugen und da Code eingeben?
Einen CommandButton im Dokument erzeugen?
Oben im Menue einen neuen Menuepunkt eintragen und dem ein makro zuweisen?

In dieser Zeile gibst du deine Kontonrn. ein:
Such = Array(„123“, „nichtda“, „567“, „auchnichtda“)

In dieser Zeile legst duu in Millisekunden fest wie lange ein Suchergebnis angezeigt wird:
Sleep 2000

In Modul1 :

Option Explicit
'
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'
Sub Suchen()
Dim Such(), S As Byte
Such = Array("123", "nichtda", "567", "auchnichtda")
For S = 0 To UBound(Such)
 Selection.HomeKey Unit:=wdStory
 Selection.Find.ClearFormatting
 With Selection.Find
 .Text = Such(S)
 .Replacement.Text = ""
 .Forward = True
 .Wrap = wdFindContinue
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With
 Selection.Find.Execute
 Sleep 2000
Next S
Selection.HomeKey Unit:=wdStory
End Sub

Gruß
Reinhard

Hallo Reinhard,

Das funktioniert soweit, doch leider bleibt das Makro nicht stehen, wenn er tatsächlich etwas gefunden hat.
Etwa bei dir ? - was passiert dann ?

Gruß Christian

Hallo Christian und Reinhard,

Aufzeichnung eines Suchen-Befehls in einem neuen leeren Dokument ergibt, wie so ein Bearbeiten-Suchen funktioniert:

 With Selection.Find
 .Text = "yadda" 'hier kommt die einzelne Kontonummer hin
 .Replacement.Text = ""
 .Forward = True
 .Wrap = wdFindContinue 'steuert, ob bei Sucherfolg weitergesucht wird \_
**mit wdFindStop könnte der Such<u>vorgang</u> bei <u>Erfolg</u> hier abbrechen**
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchWildcards = False
 .MatchSoundsLike = False
 .MatchAllWordForms = False
 End With
 Selection.Find.Execute 'löst das Suchen aus

Das funktioniert soweit, doch leider bleibt das Makro nicht stehen, wenn er tatsächlich etwas gefunden hat.

Man muß Find.Execute auswerten. Es liefert einen Boole’schen Wert zurück. Die genaue Syntax habe ich jetzt gerade nicht parat, aber ich nehme an, daß es so geht:

n = Selection.find.Execute(FindText:=„yadda“)

Das vorangehende With/EndWith setzt die Rahmenbedingungen für das Find.Execute.

Das ganze Selection.Find würde ich in eine Schleife packen, in die die verschiedenen Kontonummern der Reihne nach eingespeist werden.
Wie diese Schleife aussehen kann, hängt von der konkreten Aufgabenstellung ab. Da müßte Christian nochmal was zu sagen.

Gruß

Markus