如何优雅地在 Word 中实现替换?

我们生活在一个程序的世界,编程并非是程序员的专利,每个人都可以通过编程来使自己的工作和生活更加轻松,减少对程序员的依赖。只要你愿意,用任何一种语言来辅助自己的工作都不是难事。当然,我们需要一个好的学习方法,多少人吐槽谭浩强先生的《C 语言程序设计》,说明了至少存在误导的因素。学习编程,要有一个明确的目的,根据目的选择合适的工具,而不是为了学习而学习。

大家都知道,MS Office 套件带有一个宏语言:VBA。VBA 当然不是一门先进的语言,但因为在 Office 中内嵌,我们用它来解决问题还是可以的。

今天说说 Office 的域,说说域中一个叫做 DocVariable 的东西。

本人工作中经常要出文案,这些商业文案呢都有一些套路性的东西。比如说我们做项目售前的时候,要出《方案建议书》。《方案建议书》的文档结构类似,我一般是基于模板,增加针对客户具体的情况变化的部分。在模板中,会有多处出现客户名称、项目名称等。这个每一个客户和项目都不一样,怎么办呢?难道每次都是查找/替换?当然不是不是必须的,要灵活,就必须用到 Word 域。并且 Word 批量替换还有副作用,各位看官有木有碰到?这里就不展开讲什么是 Word 域,不熟悉的同学自己 Google 去。DocVariable 是域的一种,但需要 VBA 代码配合,所以知道的人少,平时用的也少见。

定义 DocVariable

ALT+F11,进入 VBE 环境,通过菜单【插入】-【模块】,插入一个模块,编写如下代码:

Option Explicit

Public Sub AddDocVariables()
    ' delete doc variables if any
    Dim doc_var As Variable
    For Each doc_var In ActiveDocument.Variables
        doc_var.Delete
    Next
    
    ' add new doc variables
    ActiveDocument.Variables.Add Name:="cname", Value:="XXX有限公司" ' customer name'
    ActiveDocument.Variables.Add Name:="csname", Value:="XXX公司"  ' customer short name'
    ActiveDocument.Variables.Add Name:="pname", Value:="SAP实施项目" ' project name'
End Sub

代码很直观,先删除所有文档变量,然后重新定义三个文档变量:

cname: customer name
pname: project name
csname: customer short name

文档中插入 DocVariable

将上面的代码运行一次(将光标放在过程中间,然后 F5),回到 Word 编辑界面,通过菜单【插入】-【文档部件】- 【域】(注:我的 Word 版是 2013)

如何优雅地在 Word 中实现替换?_第1张图片
word_doc_variable_01.jpg

然后找到类别为 “文档自动化” 域名为 DocVariable,选中该域,新名称中输入 cname,就是我们前面 VBA 定义的文档变量。

如何优雅地在 Word 中实现替换?_第2张图片
word_doc_variable_02.jpg

点击 “确定” 按钮,客户名称就插入了。


word_doc_variable_03.jpg

是不是感觉操作有点麻烦?Office 提供快捷键,可以非常方便插入域代码:

  • 快捷键:Ctrl + F9
  • Word 文档出现一对对应的大括号 {},中间为灰色,我们在大括号中间输入 {docviarable cname},然后再按 F9 就可以了。

平时我们都用这种方法来插入域代码。对这个域代码,我们可以通过 Shift + F9 来切换显示,Word 会交替显示 {docviarable cname} 和 “XXX有限公司” 。

如果文档中有多个域代码,我们就使用 Alt + F9 来切换显示。操作就这几招。

总结一下

  • Ctrl + F9: 插入域代码
  • F9: 执行域代码
  • Shift + F9: 单个域代码切换显示
  • Alt + F9: 整篇文档的域代码切换显示
  • 定义 DocVariable 类型的域代码,必须使用 VBA,没有手工定义的方法

你可能感兴趣的:(如何优雅地在 Word 中实现替换?)