Выделение текста слова в цикле for

Я создал этот код для поиска в моем текстовом документе и поиска слова APPENDIX3, а если он найден, удалить его и пробел перед ним (в данном случае разрыв раздела). Затем он вычитает число 3 на 1 и возвращается к началу цикла for, ищет APPENDIX2 и удаляет то, что я хотел. Он повторяется 3 раза, заканчиваясь в APPENDIX1. Единственная проблема заключается в том, что он удаляет только материал APPENDIX3. Если я перезапущу макрос, он удалит APPENDIX2 и только APPENDIX2. Так далее. Он увеличивается, но выбор не очищается. Любые предложения относительно того, как я могу изменить свой код, чтобы перебирать и каждый раз выбирать другой текст?

Sub RemoveAppendices()
Dim i As Integer
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
'Cntr = 3
'For i = 1 To 3
For i=3 to 1 step -1
    With Selection.Find
        .ClearFormatting
        .Text = "APPENDIX" & Cntr
        If Selection.Find.Execute Then
            Selection.Select
            Selection.Delete
            With Selection
                .EndKey Unit:=wdStory
                .TypeBackspace
                .Delete
            End With
        End If
    End With
    'Cntr = Cntr - 1

Next i
End Sub

person user12059    schedule 11.04.2014    source источник
comment
при удалении любой части коллекции вы должны запускать свой цикл от последнего элемента к первому. Поэтому попробуйте что-то вроде For i=3 to 1 step -1. Более того, вместо Cntr = Cntr -1 можно было использовать i.   -  person Kazimierz Jawor    schedule 11.04.2014
comment
Я изменил приведенный выше код, чтобы отразить ваши изменения, и он действительно более эффективен (так что спасибо), но проблема очистки исходного найденного текста и поиска следующего текстового значения и запуска этого выбора с помощью оператора If остается нерешенной.   -  person user12059    schedule 11.04.2014


Ответы (1)


Догадаться. Мне нужно было либо перейти к началу страницы внутри цикла, а не перед циклом, либо мне пришлось обернуть текстовый поиск во время поиска. Обновленный скрипт выглядит так:

Sub RemoveAppendices()
Dim i As Integer
For i = 3 To 1 Step -1
    'Selection.HomeKey Unit:=wdStory 'this would also work but I like wrap better
    With Selection.Find
        .Wrap = wdFindContinue
        .Text = "APPENDIX" & i
        .MatchWholeWord = True
        .MatchCase = True
        If Selection.Find.Execute Then
            Selection.Select
            Selection.Delete
            With Selection
                .EndKey Unit:=wdStory
                .TypeBackspace
                .Delete
            End With
        End If
    End With
Next i
End Sub
person user12059    schedule 11.04.2014