Цикл весь документ Word 2007 с использованием VBA - PullRequest
0 голосов
/ 01 февраля 2011

Я работаю над формой пользователя, чтобы найти конкретные фразы и комментировать их в соответствии с определенными критериями.У меня проблемы с добавлением комментариев для всех найденных фраз в документе.Изменяет только первую найденную фразу, хотя выбирает все вхождения фразы.Как я могу изменить этот код для всего содержимого?

Вот мой код:

 If Criteria2 <> "" Then
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = Criteria2
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindAsk
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            .Execute
        End With
       On Error Resume Next
        With Selection
            .Comments.Add Range:=Selection.Range, Text:="SPE 2"
        End With
End If

Ok Вот новый код, и он не работает должным образом:

Selection.Find.ClearFormatting
        With Selection.Find
           .Text = CritArray(i)
           .Replacement.Text = ""
           .Forward = True
           .Wrap = wdFindContinue
           .Format = False
           .MatchCase = False
           .MatchWholeWord = False
           .MatchWildcards = False
           .MatchSoundsLike = False
           .MatchAllWordForms = False
           Do
               .Execute
               If Not .Found Then
                Exit Do
               ElseIf .Found Then
                FoundCount = FoundCount + 1
                Selection.Comments.Add Range:=Selection.Range, Text:=MessArray(i) & CritArray(i) & "' - found for the" & Str(FoundCount) & ". time"
               End If
            Loop 
        End With

Что я получаю при использовании этого в качестве ввода:

Testrow1
Testrow2

следующее:

Testrow1 ....................................'Testrow1' - found for the 1. time
Testrow2 ....................................'Testrow2' - found for the 2. time
                                             'Testrow2' - found for the 1. time

Я не могу понять, почему это происходит с тех пор, как ..Цикл должен завершиться, если ничего не найдено.Возможно ли, что .Wrap = wdFindContinue является проблемой?Здесь есть три возможности:

  • wdFindAsk ... просит в конце документа снова выполнить поиск в начале (не хочу этого)
  • wdFindContinue ... поиск беззапрос
  • wdFindStop ... прекращается, когда он впервые находит поисковую фразу (не хочу этого)

Кто-нибудь получил подсказку?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2011

Вам просто нужно изменить его на:

.Execute Replace:=wdReplaceAll

Несмотря на то, что вы только что снова посмотрели на свой ответ (извините!), Хотите ли вы добавить комментарий для каждого измененного события?Что касается этого, вам придется выполнить цикл по каждому из них, добавив комментарий

Do
    ' .Execute Replace:=wdReplaceOne if you want to loop AND replace
    .Execute
    If Not .Found Then Exit Do
    Selection.Comments.Add Range:=Selection.Range, Text:="SPE 2"
Loop Until Not .Found

, пока все не будут найдены / заменены.

0 голосов
/ 03 февраля 2011

Я использовал сейчас ту же самую петлю, и она работает.Новый код или старый код:

For i = 0 To UBound(CritArray)
    With Selection
    .HomeKey wdStory
        With .Find
        .ClearFormatting
            Do While .Execute(FindText:=CritArray(i), _
            Forward:=True)

                Select Case i
                    Case 0: FoundCountC1 = FoundCountC1 + 1
                    Case 1: FoundCountC2 = FoundCountC2 + 1
                    Case 2: FoundCountC3 = FoundCountC3 + 1
                    Case 3: FoundCountC4 = FoundCountC4 + 1
                    Case 4: FoundCountC5 = FoundCountC5 + 1
                    Case 5: FoundCountC6 = FoundCountC6 + 1
                    Case 6: FoundCountC7 = FoundCountC7 + 1
                    Case 7: FoundCountC8 = FoundCountC8 + 1
                    Case 8: FoundCountC9 = FoundCountC9 + 1
                End Select

            Loop
        End With
    End With
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...