标签: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 “书签名”, ”要插入的文本”