[英]Restrict/Lock bookmarks from editing in word
我有很多带有很多书签的Word文档。 我使用VBA代码通过数据库中的数据更改这些书签。
问题是,有时用户需要编辑这些文档,并且他们往往会意外删除/更改我的书签,这导致VBA代码不再能够识别书签。
因此,基本上,我想知道的是如何限制用户编辑Word文档中的书签。
我不需要一个超级安全的解决方案,只需提供足够的保护,以使用户知道“我不应该碰这部分”。
预先感谢您的答复。
编辑:
我在不同的论坛上阅读,发现了这一点,
我想要哪种。 但无法实现/将其转换为VBA代码。 有人还能看到我可能如何使用它吗?
再次感谢。
编辑:Office 2007/2010。
以下想法已针对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
第二步。 我们将控制一个事件: Document_ContentControlOnEnter
。 转到文档VBAProject中的ThisDocument
模块并创建以下事件(请参见代码内的一些注释):
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
第1步和第2步的替代方法。 如果您不想使用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还有更多可能的组合。如果需要任何初始测试,以下代码可让您删除所有抄送:
Sub Remove_All_CC()
Dim CC As ContentControl
For Each CC In ActiveDocument.ContentControls
CC.Delete
Next CC
End Sub
使用保护您的整个文档
'whole document readonly
ThisDocument.Protect Password:="password", NoReset:=False, Type:=wdAllowReadOnly
要么
'only write in form fields (can't delete them, just fill them out)
ThisDocument.Protect Password:="mypassword", NoReset:=False, Type:=wdAllowOnlyFormFields
现在免费提供文档的某些部分进行编辑:
ThisDocument.Bookmarks("myBookmark").Range.Editors.Add wdEditorEveryone
Selection.Range.Editors.Add wdEditorEveryone
不保护您的整个文档,只限制您要锁定的书签
ThisDocument.Bookmarks("myBookmark").Range.Editors.Add wdEditorOwners
要么
ThisDocument.Bookmarks("myBookmark").Range.Editors.Add "abc@test.com"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.