【Excel VBA 编程】第91讲:Word自动化中,书签(Bookmark)能掀起多大的风浪
- 2026-09-27 10:01:50
总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
书签(Bookmark)是Word内置的标记工具,用于精确定位文档中的特定位置。而VBA通过书签名称直接访问并修改其内容,是最传统且稳定的标签操作方法,那么如何实现?又能带来多大的便利呢?

认识书签
书签是管理长文档、实现快速定位的“神器”。想用好它,第一步就是弄明白书签到底是什么。最直观的办法,就是看看它在Word里到底长什么样
打开任意一个Word文档,“书签”在工具栏中位置如下图所示

将光标移动到需要标记的文本位置,或选中一段特定的文本范围即可插入标签。例如,选中文字“朝花夕拾”添加了一个名为“BookName”的书签

提醒:书签是文档内部的标记,添加后通常不会在页面显示可见的图标或下划线
如果想查看书签是否添加成功,可以再次选择工具栏上的【插入】【书签】,在弹出框中查看,如下图所示成功添加了两个书签:


基于书签的编码
VBA中访问书签通常使用语句格式:Document.Bookmarks(“书签名”),其中:
Document:文档对象,是当前正在操作的 Word 文档实例
Bookmarks:书签集合对象,这个集合包含了文档中定义的所有 Bookmark 对象
(“书签名”):使用书签的名称作为索引(Index),从 Bookmarks 集合中返回一个具体的 Bookmark 对象
仍旧以上文中添加的书签“BookName”为例,说明在编码中的核心操作
Dim wordApp As ObjectDim wordDoc As ObjectDim i As IntegerDim originalRange As Object '记录书签原始位置Dim orName As StringSet wordApp = GetObject(, "Word.Application")wordApp.Visible = TrueSet wordDoc = wordApp.Documents.Open("D:\常用文件\归档\测试文档.docx") '打开文档If wordDoc.Bookmarks.Exists("BookName") = True ThenDebug.Print "替换前:" & wordDoc.Bookmarks("BookName").Range.Text'保存书签原始范围和名称Set originalRange = wordDoc.Bookmarks("BookName").RangeorName = wordDoc.Bookmarks("BookName").NameoriginalRange.Text = "三国演义" '此处会隐式删除原书签wordDoc.Bookmarks.Add Name:=orName, Range:=originalRangeEnd IfDebug.Print "替换后:" & wordDoc.Bookmarks("BookName").Range.Text
直接给Word里的书签替换文字,会把书签本身弄丢。为了解决这个问题,此处采用的是先把新文字填进去,然后立刻在原地重新“贴”上一个同名的新书签。其中:
第9行代码的作用是判断书签“BookName”是否存在,存在则进行替换操作
第12、13行代码获取并保存书签的原始位置与名称。在替换文本之前,先将书签的 Range 对象和 Name 保存到变量中
第14行代码利用书签替换文本内容,这个操作会完成两件事:一是用新文本替换书签对应的范围内所有文字;二是自动删除“BookName”书签
第15行代码在新文本上重新添加书签。文本替换操作后,我们之前保存的 Range 对象会自动扩展(或收缩)以适应新文本的长度,此时,我们在新的文本上重新添加书签“BookName”
以上代码执行后,立即窗口显示:




结束语
今天的分享就到这里了,咱们下期继续
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号,解锁更多的VBA技能