以下想法是让Word 2010的测试应该在2007年和2013年的工作以及而不是2003年
我会建议使用ContentControls
(在文本中进一步称为CC)以及Bookmarks
。接下来,您将需要控制一个事件,该事件将检查用户是否在ContentControl
的任何内部进行选择。如果是这样,我们将显示消息和/或在保护区外移动选择。
步骤1。您的每个书签都应该包含在RichText ContentControl之内。您可以为选定的书签手动执行此操作,也可以运行以下简单代码为活动文档中的所有书签执行此操作。
(重要的假设!没有任何其他ContentControls
文档中!)
Sub Add_Bookmark_CC()
Dim bookM As Bookmark
For Each bookM In ActiveDocument.Bookmarks
ActiveDocument.ContentControls.add wdContentControlRichText, bookM.Range
Next
End Sub
第2步。我们将控制一个事件:Document_ContentControlOnEnter
。转到ThisDocument
模块,可以在文档的VBAProject并创建以下事件(见里面的代码一些评论):
Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl)
Debug.Print Now, ContentControl.Range.Bookmarks.Count
If ContentControl.Range.Bookmarks.Count > 0 Then
'Optional message box for user
MsgBox "There is bookmark inside this area which you should not change. " & _
vbNewLine & "You will be moved out of this range"
'optionam selection change right after CC area
Dim newPos As Long
newPos = ContentControl.Range.End + 2
ActiveDocument.Range(newPos, newPos).Select
End If
End Sub
替代了一步第一和第二。如果您不想使用CC事件,则可以将CC添加到具有CC内容保护的每个书签。在这种情况下,你只需要第一步和下面的子:
Sub Add_Bookmark_CC_Protected()
Dim bookM As Bookmark
Dim CC As ContentControl
For Each bookM In ActiveDocument.Bookmarks
Set CC = ActiveDocument.ContentControls.add(wdContentControlRichText, bookM.Range)
CC.LockContents = True
Next
End Sub
决赛!正如你可以看到有步骤1和2 一些可能的组合,下面的代码可以删除所有CC,如果你需要任何初始测试:
Sub Remove_All_CC()
Dim CC As ContentControl
For Each CC In ActiveDocument.ContentControls
CC.Delete
Next CC
End Sub
书签感谢您的回答,将不得不在今天进行测试。但会回来给你。 – Mana
+1非常好的答案KazJaw – 2014-01-23 12:33:02
我会为你的解决方案,因为它的细节和我认识到代码的分配,它看起来很有希望。我觉得它会起作用。今天之前没有过测试过的东西。 – Mana