Найти / заменить текст в нижнем колонтитуле документа Word с помощью Excel VBA - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу заменить некоторые теги в моем документе Word.Мое текущее решение не предусматривает замену / поиск в нижнем колонтитуле документа.

Используемый мной шаблон слова имеет 2 разных нижних колонтитула (первая страница отличается от нижнего колонтитула второй страницы).Я хочу что-то изменить в нижнем колонтитуле второй страницы.

'replacement regarding CHAPTER 1
For CurRow = Tabelle2.Range("C2") To Tabelle2.Range("C3")
    If Tabelle2.Range("B" & CurRow).Value = "x" Then
        ReplacementTextF = "<<TagToBeFound>>"
        ReplacementText = "I am a customer"
        dataObjectLongText.SetText ReplacementText
        dataObjectLongText.PutInClipboard       'Copy to clipboard
        With WordDoc.Content.Find
            .Execute FindText:=ReplacementTextF, ReplaceWith:="^c", Replace:=2, Wrap:=wdFindContinue    'Paste from clipboard
        End With

Пока здесь все работает как надо.Он находит все тексты и заменяет их с помощью буфера обмена (потому что текст замены часто превышает 255 символов).

Чтобы заглянуть в нижний колонтитул, я попробовал это сразу после кода выше:

        With WordDoc.Sections(1).Footers(1).Range.Find
            .Execute FindText:=ReplacementTextF, ReplaceWith:="^c", Replace:=2, Wrap:=wdFindContinue    'Paste from clipboard
        End With

Я попробовал несколько решений.Это мой последний подход.Я ссылался на библиотеку объектов Word.

1 Ответ

0 голосов
/ 20 декабря 2018

Поскольку вы используете позднее связывание, вы не можете просто использовать константу Word, например, wdFindContinue;Вам нужно либо объявить его, либо использовать его числовой эквивалент.Другие сложности могут возникнуть, если при предыдущем поиске / замене использовались символы подстановки и / или форматирование аргументов поиска или замены, поэтому имеет смысл сбросить их.Попробуйте:

With WordDoc.Sections(1).Footers(1).Range.Find '1 = wdHeaderFooterPrimary
  .ClearFormatting
  .Replacement.ClearFormatting
  .Text = ReplacementTextF
  .Replacement.Text = "^c"    'Paste from clipboard
  .Wrap = 1 'wdFindContinue
  .MatchWildcards = False
  .Execute Replace:=2 'wdReplaceAll
End With

или:

With ActiveDocument.StoryRanges(9).Find '9 = wdPrimaryFooterStory
  .ClearFormatting
  .Replacement.ClearFormatting
  .Text = ReplacementTextF
  .Replacement.Text = "^c"    'Paste from clipboard
  .MatchWildcards = False
  .Wrap = 1 'wdFindContinue
  .Execute Replace:=2 'wdReplaceAll
End With

В любом случае, поскольку кажется, что нижний колонтитул должен отображать тот же контент, который вы заменяете ReplacementTextF в теле документа, выможет быть лучше назначить уникальное имя стиля какому-либо ReplacementTextF, а затем ссылаться на этот стиль через поле STYLEREF в нижнем колонтитуле.Сделайте это в шаблоне.Таким образом, вы избавитесь от необходимости найти / заменить в нижнем колонтитуле.

...