替换部分Word页脚文本而不会丢失格式和活动对象

时间:2015-11-17 01:53:51

标签: vba ms-word footer

我要求在Word文档中维护标准页脚。页脚包含可以更改的文档ID和版本,因此我必须不仅可以插入此标准页脚,还可以更新它。

我需要识别页脚的标准字符串部分并更新它。字符串看起来像<<Libray:DocId:vX>>(尖括号用于帮助匹配标准页脚的开头和结尾)。

值得关注的是,单独的括号不足以可靠地识别标​​准字符串,所以我正在进行RegEx ("<<[A-Za-z0-9_-]+:\d+v\d+>>")匹配和Replace以实现更新,但似乎修改了Text属性wipes任何格式和活动内容。

如果我不能在Text属性上使用RegEx.Replace而不会丢失格式,那么还有另一种标记和更新标准字符串的方法吗?

If oRegEx.Test(strFooter) Then
        ' Set the footer for the active document
        With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
            .Style = wdStyleFooter
            .Font.Size = 8
            .Text = oRegEx.Replace(strFooter, strTextString) 'this wipes out page numbering and formatting
        End With
    Else
        With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
            .Style = wdStyleFooter
            .Font.Size = 8
            .InsertAfter strJoiner & strTextString 'this preserves formatting and active content
        End With
    End If

1 个答案:

答案 0 :(得分:2)

您遇到的问题是oRegEx.Replace仅适用于文本内容。它不知道并且不能保留strFooter中可能存在的任何格式。第一个代码块实际上是用RegEx的结果替换Footer的整个内容。

另一方面,

InsertAfter保留原始Range的内容。还有其他类似的方法 - 这取决于你想要做什么。

由于您没有详细说明使用RegEx的原因,尽管您提到“查找”,但很难提供其他有用的信息。 Word确实有自己的查找/替换功能,作为Range对象的属性。 Word的查找支持通配符,类似于RegEx。

编辑:感谢您提供更多信息。在Word中,切换到页眉/页脚视图。按Ctrl + F显示“查找”功能。如果这打开任务窗格,请单击下拉列表右侧的箭头,然后选择“高级查找”以获取完整对话框。单击“替换”选项卡。

激活“通配符”复选框。在“查找”框中输入类似于以下内容的搜索代码,但用您正在测试的文档替换有效文本:(\&lt; \&lt;)库:DocId:vs#(&gt;&gt;)

在替换框中:\ 1Abc:efg:vsn2 \ 2

括号查找定义可在“替换”中引用的“表达式”,以便可以保留此内容。上述结果应该是&lt;&gt;。

完成此操作后,记录在宏中执行查找/替换步骤。这将为您提供在代码中使用的语法。

代码的附加提示:如果整个页脚应具有不同的字体大小,则应更改页脚样式定义,而不是将其添加为直接格式。