我经常使用 Word 中的书签来创建技术文档,其中包含指向引用和常用信息的内部链接,这些信息需要在整个文档中保持一致。您可以通过选择文本,然后转到菜单Insert
-> Links
->Bookmark
并指定名称,然后转到Insert
-> Links
->Citations
并选择要插入的书签来创建它们。然后会将该书签的文本插入文档中的其他位置。
举个例子来说明我这样做的原因:我经常在首页列出文档状态,然后在页脚中重复该信息,使用书签,我可以设置指向该文本的链接,然后只需将该链接插入页脚,每当我转到打印预览或更新文档中的所有字段时,它都会自动更新。这样,我就可以避免进行搜索和替换,只需知道正确的文本将在正确的位置更新即可。
现在假设我有一个书签,我刚刚粗略地命名了它,只是为了把它放到位:
没有右键单击来重命名书签,并且我找不到任何可以让我修改它的文档属性。
我可以插入新的通过选择相同的文本然后删除旧文本来添加书签,但你会得到这样的结果:
然后您必须右键单击该字段并将其指向(现在已有效重命名的)书签。
这并不完全可用,特别是在多次使用此书签的大型文档中。
我在 Google 上搜索了一下,在网上看到了几个 VBA 脚本,比如这个问题但由于它们实际上创建了新的 boommark 并删除了旧的 boommark,因此它们会产生与上述相同的问题,并且不太理想。
有没有更简单或更有效的方法来重命名 Word 文档中的书签?或者我可能使用了错误的工具™ 来完成这项工作?
答案1
有没有更简单或更有效的方法来重命名 Word 文档中的书签?
Word 没有内置重命名功能。有几种方法可以解决此缺陷:
使用插件。
使用 VBA。
附加解决方案
使用书签工具插件
它提供了一个友好的用户界面,可以执行标准书签对话框可以执行的所有操作以及更多功能。
书签工具是为 Word 2003 开发的。它在 Word 2007/2010 中完全发挥作用。
...
通过“添加/重命名书签”部分,添加书签变得轻而易举。
来源书签工具插件
VBA 解决方案
没有重命名功能。您必须删除旧名称并使用新书签名称标记范围。以下是示例 VBA 代码:
Sub ReNameBookMark()
Dim doc As Word.Document
Dim rng As Word.Range
Dim bmk As Word.Bookmark
Dim inpBookmark, repBookmark, fieldStr As String
Set doc = Word.ActiveDocument
inpBookmark = InputBox("Enter bookmark name that you want to be replaced:", "BookMark Replace")
repBookmark = InputBox("Enter bookmark name replace with:", "BookMark Replace")
Set rng = doc.Bookmarks(inpBookmark).Range
Set bmk = doc.Bookmarks(inpBookmark)
bmk.Delete
rng.Bookmarks.Add (repBookmark)
If doc.Fields.Count >= 1 Then
For i = 1 To doc.Fields.Count
fieldStr = doc.Fields(i).Code.Text
If Left(fieldStr, 4) = " REF" Then
doc.Fields(i).Code.Text = Replace(fieldStr, inpBookmark, repBookmark, , 1, vbTextCompare)
doc.Fields(i).Update
End If
'MsgBox "Code = " & doc.Fields(i).Code & vbCr & "Result = " & doc.Fields(i).Result & vbCr
Next i
End If
End Sub
来源更改书签的“名称”,而不是其文本,并使用额外的循环来遍历文档中的字段,以更改可能引用被重命名的书签的任何字段。
使用此脚本时应小心谨慎。例如,重命名任何仅命名为“REF”(或此类大写或小写变体)的书签将要休息全部以有趣和意想不到的方式引用。这仅作为示例和粗略修复。
如果要一次性批量重命名多个书签,请参阅有没有更简单或更有效的方法来重命名 Word 文档中的书签?其中还包括示例 VBA 代码。
答案2
我遇到了同样的问题,并偶然发现了这个解决方法/解决方案。
对于要引用的文本(在我的情况下为标题),设置文档属性标题如下:
Insert tab
→ Quick Parts
→ Document Property
→Title
然后会添加一个可编辑的文本框,您可以在其中输入标题。
然后,要引用它,您只需转到Insert tab
→ Quick Parts
→ Field
→ Title
,或者像我意外做的那样 - 我设置了一个参考,当我用它更新它时,F9添加了它所引用的标题框。
这非常酷,因为当你更新标题框时,所有引用都会自动更新而无需按下F9!!! 当你在页眉中有引用时这非常棒,因为Ctrl+A函数不会捕获页眉/页脚中的内容,并且你通常必须在页眉/页脚内双击进行选择,然后按下F9进行更新。
因此,不要像上面提到的那样创建标题引用,而是执行以下操作:
设置完标题框后,创建标题框的书签:
- 选择标题框(确保单击顶部的标题选项卡以选择整个框)
Insert
→Bookmark
→(说出名字Project_title
)→add
然后像这样添加引用:
Insert tab
→Quick Parts
→Field
→Ref
(并选择Project_title
或无论你如何称呼它)
答案3
上述 David Postill 的 vba 代码抓住了要点,但遗漏了一件事:它将修复文档主体中的引用,但不会修复隐藏在页眉或页脚中的任何引用。请参阅我为回答类似问题而发布的代码,网址为: https://superuser.com/a/1612677/881187
它提供批量重命名书签的功能,包括对整个文档或选定内容进行操作的选项,以及根据前缀重命名书签组。然后,它还会修改所有引用、整个文档,包括页眉和页脚。