Man*_*ana 13 vba bookmarks ms-word restriction word-vba
我有很多带有大量书签的word文档.我使用VBA代码用来自数据库的数据来更改这些书签.
问题是,有时用户需要编辑这些文档,并且他们倾向于意外删除/更改我的书签,这导致VBA代码不再识别书签.
所以基本上,我想知道的是我如何限制用户在word文档中编辑我的书签.
我不需要超级安全的解决方案,只需要足够的保护,以便用户知道"我不应该触摸这部分".
在此先感谢您的回答..
编辑:
我正在不同的论坛上阅读,并遇到了这个,
哪种做我想要的.但无法实现/将其转换为VBA代码.有人也可以看到我可以使用它吗?
再次感谢.
编辑:office 2007/2010.
Kaz*_*wor 13
针对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
Run Code Online (Sandbox Code Playgroud)
第二步.我们将控制一个事件:Document_ContentControlOnEnter.转到ThisDocumentDocument 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
Run Code Online (Sandbox Code Playgroud)
第1步和第2步的替代方案.如果您不想使用CC事件,可以使用CC内容保护将CC添加到每个书签.在这种情况下,您只需要第1步和以下子:
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
Run Code Online (Sandbox Code Playgroud)
最后!如您所见,步骤1和2有更多可能的组合.如果您需要进行任何初始测试,以下代码允许您删除所有CC:
Sub Remove_All_CC()
Dim CC As ContentControl
For Each CC In ActiveDocument.ContentControls
CC.Delete
Next CC
End Sub
Run Code Online (Sandbox Code Playgroud)