Jak znaleźć słowo w dokumencie z roku bieżącego zaznaczenia

głosy
0

Mam wyciąg z kodem, który wyszukuje słowa w dokumencie z bieżącej selekcji do końca. Intencją tego jest więc następnym razem, to uruchomić go znajdzie następne wystąpienie i tak dalej.

To działa dobrze, dopóki nie znajdzie wyraz w tabeli, w którym momencie to nie znajdziesz nic po tym wpisem. Muszę być w stanie znaleźć słowa w tabelach, jak i tekst. Prowadzi również jako funkcja w UserForm (uruchomiony niemodalne), czekając na wejście użytkownika będzie dostarczanie różnych słów, pętli oraz wykonywanie czynności w zależności od danych wejściowych użytkownika. Więc nie sądzę, mogę uruchomić mój inny kod w sekcji znalezienia (choć jestem zadowolony zostać poprawione).

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

Jak mogę dostać go znaleźć wpisy przeszłe stole?

Utwórz 19/12/2018 o 14:12
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Można uruchomić inny kod w Znajdź / Zamień pętlę, za pomocą kodu, takich jak:

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

Taki kod jest niezależne od stołów.

Odpowiedział 20/12/2018 o 13:21
źródło użytkownik

głosy
0

Przeszukując cały dokument (lub określonego zakresu) i przechowywania lokalizacje każdej instancji w tablicy, można następnie porównać te lokalizacje do bieżącego zaznaczenia i wybierz wystąpienie po bieżącej selekcji.

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
Odpowiedział 20/12/2018 o 10:14
źródło użytkownik

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