Как правильно применять. Найти в Word документы из VBA Excel? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь найти в текстовом документе (FromDo c) строку Appendix A в стиле Heading 1, используя приведенный ниже код. Я разработал код в редакторе MS Word VBA и работал очень хорошо ... пока я не переместил его в Excel VBA.

Поскольку я вставил код в Excel VBA, я заменил .Selection на ActiveDocument.Range, поскольку обнаружил, что первый не работает в Excel VBA. Однако теперь метод Execute не может найти Appendix A. Я потратил много часов на устранение неполадок, включая чтение сообщений StackOverflow, но безрезультатно.

' Activate FromDoc
oApp.Visible = True
oApp.ActiveWindow.Activate
FromDoc.Activate

' Find Appendix A

With ActiveDocument
    .Range.WholeStory
    .Range.Collapse wdCollapseStart
    .Range.Find.ClearFormatting

    With .Range.Find
        .Style = ActiveDocument.Styles("Heading 1")
        .Text = "Appendix A"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = True
    End With

    .Range.Find.Execute
    .Collapse wdCollapseStart

    Dim r1 As Range
    Set r1 = .Range

End With

Я также с подозрением отношусь к Set r1 = .Range. Я обеспокоен тем, что это может не сработать.

Благодарен за помощь в понимании и устранении проблемы.

1 Ответ

0 голосов
/ 07 апреля 2020

Большая часть вашего кода не имеет смысла. Для того, что вы описали, Word не должен быть видимым, и вам не нужно активировать документ; и вам не нужно устанавливать новый диапазон. Все, что вам нужно:

With FromDoc
  With .Range
    With .Find
      .ClearFormatting
      .Style = "Heading 1"
      .Text = "Appendix A"
      .Format = True
      .Forward = True
      .Wrap = 1 'wdFindContinue
      .MatchCase = False
      .MatchWholeWord = True
      .Execute
    End With
    With .Duplicate
      .Collapse 1 'wdCollapseStart
      'do whatever it is you want to do before the Appendix A heading.
    End With
  End With
End With

Обратите внимание, что я предоставил цифры c значения wdFindContinue и wdCollapseStart; Вы не можете использовать именованные константы с поздним связыванием (если это то, что вы используете), если только вы не объявите их сначала.

...