我有一个经常使用的 Word 文档,但需要更改文档中出现多次的一个短语。有没有办法将此短语设为变量并更新一次,而不是每次都搜索文档来更新它?
答案1
我想你想使用映射内容控件。
下拉菜单Document Properties
下有一组这样的项被错误地标记为。Quick Parts
Insert tab
这些是映射内容控件,主要对应于高级文档属性。这是我的页面上有关于插入和使用这些。这不是实现您想要的操作的唯一方法,但却是 .docx 格式文档中最有效的方法。
Greg Maxey 的页面中给出了此方法和其他复制数据的方法重复数据。这是 David Postill 在其评论中链接的页面。但是,与其他方法不同,映射内容控件只需要在一个地方进行更改,即可在整个文档中重现该更改。
任何通用内容控件都可以映射,但文档属性列表中的控件除了日期选择器外都是纯文本。
一旦将其中一个插入文档中,就可以更改其名称和提示,然后将其复制到文档中您想要获取信息的其他位置。
请注意,这些设置是为了让文档中任何位置的控件发生更改都会更改所有副本中的信息。复制数据的其他方法需要更多注意更新副本,如更新字段。
在 Windows 版本中,内容控件最容易创建/修改。在 Mac 上,它们更难设置,但可以做到。您可以从 Windows 创建的文档中复制它们,也可以使用 vba 创建它们。这是 Word MVP John Korchok 的如何在 Mac 上执行这些操作的页面。
答案2
因此,一种方法是使用易于识别的文本在文档中“放置变量”,并将文档保存为模板。然后使用查找和替换来查找“变量”并用短语替换。
我通常会做一些类似于{BOOKMARK_PHRASE_ONE}
短语通常出现的位置的事情。使用“全部替换”的查找和替换操作可以一举完成。
对于复杂的业务文档,我会使用可以处理这些内容的宏(再次保存在模板文件中),然后调用宏中的函数来替换多个内容。我无法在此处发布整个过程,但我所做的是设计 VBA 表单来收集我需要的信息,然后使用包装在可重复调用的函数中的查找和替换过程。
基本上:你拿到文档,{BOOKMARK_PHRASE_ONE}
在一个或多个地方输入内容,设置宏来完成繁重的工作,然后将其保存为模板。随后打开模板文件,它会打开一个复制,然后运行设置文本的宏。副本将保存为普通文档,当您需要修改业务流程(样板文本、VBA 等)时,您再次“另存为模板”。
VBA 可能看起来大致如下:
Const txtFind_PHRASE_ONE = "{BOOKMARK_PHRASE_ONE}"
Const txtReplace_PHRASE_ONE = "This would be phrase one."
Const txtFind_PHRASE_TWO = "{BOOKMARK_PHRASE_TWO}"
Const txtReplace_PHRASE_TWO = "This would be phrase two."
sub replacePhrases()
replacePhrase txtFind_PHRASE_ONE, txtReplace_PHRASE_ONE
replacePhrase txtFind_PHRASE_TWO, txtReplace_PHRASE_TWO
end sub
Private sub replacePhrase(txtFind as string, txtReplace as string)
With Selection.Find
.Text = txtFind
.Replacement.Text = txtReplace
.Forward = True
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
end sub
const
顶部短语的声明通常是我使用表单填充的变量。Sub 名称将replacePhrases
在“宏”对话框中可见,并且是我运行以启动该过程的宏。Sub 名称replacePhrase
被标记为私有,因此它不会显示在宏对话框中;您将查找 + 替换文本对传递给它。