Comment trouver un mot dans un document à partir de la sélection actuelle partir

voix
0

J'ai un extrait de code qui recherche un mot dans un document de la sélection en cours jusqu'à la fin. L'intention de c'est donc la prochaine fois qu'il est exécuté, il trouvera la prochaine instance et ainsi de suite.

Il fonctionne très bien jusqu'à ce qu'il trouve un mot dans une table, à quel point il ne trouvera rien après cette entrée. Je dois être en mesure de trouver des mots dans les tableaux ainsi que le texte. Il fonctionne également en fonction dans un userform (en cours d'exécution modales), en attendant l'entrée d'utilisateur, fournissant des mots différents, en boucle et effectuer des actions en fonction de l'entrée utilisateur. Donc, je ne crois pas que je peux courir mon autre code dans la section find (bien que je suis heureux d'être corrigé).

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

Comment puis-je obtenir pour trouver des entrées passées la table?

Créé 19/12/2018 à 14:12
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Vous pouvez exécuter le code dans un autre Rechercher / Remplacer la boucle, en utilisant le code comme:

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

Un tel code est affecté par des tables.

Créé 20/12/2018 à 13:21
source utilisateur

voix
0

En recherchant le document entier (ou plage spécifiée) et la mémorisation des emplacements de chaque instance dans un tableau, vous pouvez comparer ces endroits à la sélection en cours et sélectionnez l'instance après la sélection actuelle.

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
Créé 20/12/2018 à 10:14
source utilisateur

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