使用Excel VBA在Word文档页脚中查找/替换文本

时间:2018-12-20 08:24:54

标签: excel vba replace ms-word footer

我想替换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 :(得分:1)

您似乎正在使用后期绑定,因此不能简单地使用wdFindContinue之类的Word常量;您需要声明它或使用其数值等效项。如果以前的“查找/替换”使用通配符和/或“查找”或“替换”参数的格式,则可能会引起其他复杂情况,因此重置它们是明智的。试试:

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分配一个唯一的Style名称,然后通过页脚中的STYLEREF字段。在模板中执行此操作。这样一来,您就无需在页脚中查找/替换。