Word VBA技术:处理书签

2023-02-16 09:52:02 浏览数 (1)

标签:Word VBA

在Word中,有两类书签:

1.“占位符”书签(Placeholder Bookmarks),即在文档中单击某处,然后插入的书签。

2.“封闭”书签(Enclosing Bookmarks),即选择某文本后插入的书签。

有几种将文本插入到书签处的方法。使用的方法取决于后面是否要从书签处获取文本。

在书签处插入文本最常见的代码示例如下:

代码语言:javascript复制
ActiveDocument.Bookmarks("完美Excel").Range.Text = "excelperfect"

即,在书签“完美Excel”处插入文本“excelperfect”。

在这种情形下,如果是“占位符”书签,则会在书签处插入文本;如果是“封闭”书签,则在书签位置插入文本的同时会删除书签。

代码:

代码语言:javascript复制
ActiveDocument.Bookmarks("完美Excel").Range.InsertAfter "公众号"
ActiveDocument.Bookmarks("完美Excel").Range.InsertBefore "微信"

在这两种情形下,如果是“占位符”书签,则会在书签后插入文本;如果是“封闭”书签,则会在书签位置之后或之前插入文本。

要获取书签处的文本,使用代码:

代码语言:javascript复制
strBookmark = ActiveDocument.Bookmarks("完美Excel").Range.Text

注意,这种情形下的书签应该是“封闭”书签。

如果想将文本插入“占位符”书签(使其成为“封闭”书签),以便以后可以从中获取文本,该怎么办?如果书签已经是“封闭”书签,想替换其中的文本,该怎么办?VBA中没有可以实现这种要求的命令,需要做的是用插入的文本替换书签(此时书签会被删除),然后再围绕插入的文本重新创建书签。示例代码如下:

代码语言:javascript复制
Dim BookmarksRange As Range
Set BookmarksRange = ActiveDocument.Bookmarks("完美Excel").Range
BookmarksRange.Text = "666"
ActiveDocument.Bookmarks.Add Name:="完美Excel", Range:=BookmarksRange

如果文档中有许多书签需要更新,那么上述代码会反复重复,因此最好的方案是将其作为带有参数的子程序供主程序调用,代码如下所示:

代码语言:javascript复制
Sub UpdateBookmark(BookmarkToUpdate As String, TextToUse As String)
 Dim BookmarksRange As Range
 Set BookmarksRange =
 ActiveDocument.Bookmarks(BookmarkToUpdate).Range
 BookmarksRange.Text = TextToUse
 ActiveDocument.Bookmarks.Add BookmarkToUpdate, BookmarksRange
End Sub

调用代码如下:

代码语言:javascript复制
UpdateBookmark “书签名”, ”要插入的文本”
vba

0 人点赞