Hallo,
dazu musst du wissen, ob irgendwo vor dem gefundenen Wort ein einführendes Gänsefüsschen und irgendwo nach dem Wort ein ausführendes Gänsefüsschen ist. Selbst wenn dem so ist, kann dieses sich bereits auf ein anderes Zitat beziehen. Also braucht man einen Code der prüft ob andere Zitate bereits abgeschlossen sind. Das würde ich aus Gründen der Übersichtlichkeit in eine externe Funktion auslagern. Befindet sich ein Fundwort innerhalb eines Zitats, kannst du einfach nochmal Execute ausführen um dieses zu überspringen, bevor du darauf reagierst.
Bedingung: Es darf sich nicht innerhalb eines bereits eingeleiteten Zitatblocks, ein zweites Zitat mit Gänsefüsschen befinden. Jeder Block muss also für sich abgeschlossen sein, bevor ein neues eingeleitet wird. Die dazwischen liegenden Suchwörter werden gefunden. Probier mal folgenden Code:
Sub Finden()
vTextFN = "Müller"
With Selection.Find
.Text = vTextFN
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute
Do While .Found And InQuotes(.Parent.Range)
.Execute
Loop
If .Found Then
'Selection.InsertFile FileName:=vTextEIN, link:=False
End If
End With
End Sub
Function InQuotes(rng As Range) As Boolean
Dim drng As Range, t As String
Set drng = rng.Parent.Range
Dim a As Long, a1 As Long, a2 As Long, a3 As Long, b As Long, b1 As Long, b2 As Long, b3 As Long, x As Byte
a1 = InStrRev(drng.Text, Chr(34), rng.Start + 1)
a2 = InStrRev(drng.Text, Chr(132), rng.Start + 1)
a3 = InStrRev(drng.Text, Chr(147), rng.Start + 1)
a = IIf(a2 > a1, a2, a1)
a = IIf(a3 > a, 0, a)
b1 = InStr(rng.Start + 1, drng.Text, Chr(34))
b2 = InStr(rng.Start + 1, drng.Text, Chr(147))
b3 = InStr(rng.Start + 1, drng.Text, Chr(132))
b = IIf(b2 < b1 Or b1 = 0, b2, b1)
b = IIf(b3 < b And b3 > 0, 0, b)
If a > 0 Then
t = drng.Characters(a).Next
If t <> " " And t <> Chr(13) And t <> Chr(10) Then x = x + 1
End If
If b > 0 Then
t = drng.Characters(b).Previous
If t <> " " And t <> Chr(13) And t <> Chr(10) Then x = x + 1
End If
InQuotes = x = 2
End Function
Falls der Müller im Dokument mehrfach außerhalb von Zitaten auftauchen sollte, kannst du ja noch eine Schleife drumbasteln, die du for dem ersten Execute einleitest und vor End With beendest.
Gruß Mr. K.
|