Wie ein Wort in einem Dokument aus der aktuellen Auswahl finden ab

stimmen
0

Ich habe einen Auszug aus Code, der für ein Wort in einem Dokument aus der aktuellen Auswahl bis zum Ende durchsucht. Die Absicht, dies ist also das nächste Mal es es laufen gelassen wird die nächste Instanz und so weiter finden.

Es funktioniert gut, bis er ein Wort in einer Tabelle findet, an welcher Stelle es nichts nach diesem Eintrag finden. Ich muss in der Lage, als auch Textwörter in Tabellen zu finden. Es läuft auch als eine Funktion in einer Userform (Lauf modalen), eine Benutzereingabe wartet dann verschiedene Worte bereitstellt, Looping und Ausführen von Aktionen in Abhängigkeit von Benutzereingaben. Deshalb glaube ich nicht, ich kann meinen anderen Code innerhalb des Funds Abschnitt laufen (obwohl ich glücklich bin korrigiert zu werden).

Sub test1()

Dim list() As String
Dim wrd As String
Dim mrk As Integer

wrd = ABC 'Get next word from list

'set range to search as from current selection (previously found) to end of document
Dim DocRng
Set DocRng = ActiveDocument.Range(Start:=Selection.End, End:=ActiveDocument.Content.End)

mrk = Selection.End 'Mark end of previously found instance (current selection)

With DocRng.Find 'Find next instance of word and select it
     .Text = wrd
     .MatchCase = True
     .Forward = True
     .Execute
     DocRng.Select
End With

If Selection.End = mrk Then 'If selection hasn't changed inform user and go to start of document
    MsgBox (Reached end of document.)
    Selection.GoTo What:=wdGoToLine, Which:=wdGoToAbsolute, Count:=0
End If

tmp = Selection.Text 'Save currently selected text

End Sub

Wie bekomme ich es Einträge über den Tisch zu finden?

Veröffentlicht am 19/12/2018 um 14:12
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
1

Sie können einen anderen Code innerhalb einer Suchen / Ersetzen-Schleife laufen, Code wie:

Sub Demo()
With ActiveDocument.Range
  With .Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = InputBox("What is the Text to Find")
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = True
    .MatchWholeWord = True
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute
  End With
  Do While .Find.Found
    .Select
    Select Case MsgBox("Replace this one?", vbYesNoCancel)
      Case vbCancel: Exit Sub
      Case vbYes: .Text = InputBox("Replacement text")
      Case Else
    End Select
    .Collapse wdCollapseEnd
    .Find.Execute
  Loop
End With
End Sub

Ein solcher Code ist unbeeinflusst von Tabellen.

Beantwortet am 20/12/2018 um 13:21
quelle vom benutzer

stimmen
0

Durch das ganze Dokument suchen (oder angegebenen Bereich) und Speichern der Positionen der jeweils in einer Reihe, kann man dann diese Positionen auf die aktuelle Auswahl vergleichen, und die Instanz nach der aktuellen Auswahl auswählen.

Function search()

Dim list() As String
Dim Wrd As String
Dim k As Integer
Dim Nfound As Boolean

Dim Def As String
Dim location() As String

'Search document and get locations of each instance of a word

Wrd = "ABC" 'Get next word from list
Def = "Alphabet"
k = 1

Dim DocRng
Set DocRng = ActiveDocument.Content 'search whole document

With DocRng.find
     .Text = Wrd
     .MatchCase = True

    Do While .Execute 'For each entry found, store start and end to array
        ReDim Preserve location(2, k)
        location(1, k) = DocRng.Start
        location(2, k) = DocRng.End
        k = k + 1
    Loop

End With

'Compare the found locations against the current selection and select the first instance after current selection

Nfound = True 'Set as not found until it is found

    j = Selection.End 'mark current cursor location

    For k = 1 To UBound(location, 2)
        If location(1, k) > j + Len(Def) Then '+ Len(Def) accounts for changes to text
            ActiveDocument.Range(Start:=location(1, k), End:=location(2, k)).Select
            Nfound = False
            Exit For
        End If
    Next

    If Nfound Then 'if not found got to first instance found
        k = 1
        ActiveDocument.Range(Start:=location(1, k), End:=location(2, k)).Select
    End If

End Function
Beantwortet am 20/12/2018 um 10:14
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more