检测插入点是否在书签(Microsoft Word)内
Denise正在开发一个宏,她需要测试以查看插入点是否位于书签中。她需要知道这一点,因为如果插入点在书签中,则需要让代码修改书签。如果它不在书签中,则她的代码需要创建一个。
从理论上讲,该过程非常简单。您所需要做的就是以这种方式查看所选内容中有多少个书签:
If Selection.Bookmarks.Count > 0 Then ' Inside a bookmark End If
无论选择内容是文本范围还是选择内容折叠到插入点,这都有效。但是,有几个潜在的“陷阱”要注意。第一个是如果插入点紧靠书签的左侧(仅触摸书签的开头),则Count属性仍将大于0。这是因为由折叠的插入点定义的Selection为被认为包括在插入点右边的字符。
要注意的第二件事是,如果您的选择被折叠,则不能依赖Count属性为0或1。实际上,它可以大于1,因为书签可能会“重叠”。 |||因此,插入点必须同时在一个以上的书签中。因此,您可能需要代码来测试插入点位于哪个书签中。最简单的方法是通过以下方式检查书签的Name属性:
Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse If Selection.Bookmarks.Count > 0 Then ' Inside a bookmark For J = 1 To Selection.Bookmarks.Count If Selection.Bookmarks(J).Name = "DesiredName" Then bFoundIt = True End If Next J End If
执行此代码时,仅当插入点在所需书签内时bFoundIt才会为True。还要注意,包含了一个折叠选择的命令,以确保选择确实位于插入点而不是所选文本的范围内。
第三个潜在的“陷阱”是Word实际上出于多种目的在内部使用书签。例如,它使用它们来定义打印范围,但这不是唯一的地方。但是,可以检测到系统定义的书签,因为它们始终以下划线开头。尽管在上述代码中这不是问题(因为您专门在寻找具有特定名称的书签),但是如果您的代码正在寻找任何书签,则可能是一个潜在问题。以下代码作为可调用函数编写,在这种情况下可能会有所帮助。
Function InBookmark() As Boolean ' Returns True if the insertion point is inside ' any non-system bookmark. Also collapses the ' selection to an insertion point Dim bFoundIt As Boolean Dim J As Integer bFoundIt = False Selection.Collapse For J = 1 To Selection.Bookmarks.Count If Left(Selection.Bookmarks(J).Name) <> "_" Then bFoundIt = True End If Next J InBookmark = bFoundIt End Function
要在宏中使用此功能,可以使用以下简单的命令:
If Not InBookmark Then ' create new bookmark End If
注意:
如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)上描述的宏,我准备了一个包含有用信息的特殊页面。
链接:/ wordribbon-WordTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_WordTips_是您进行经济有效的Microsoft Word培训的来源。
(Microsoft Word是世界上最流行的文字处理软件。)本技巧(6905)适用于Microsoft Word 2007、2010、2013和2016。