簡體   English   中英

限制/鎖定書簽,以防止在單詞中進行編輯

[英]Restrict/Lock bookmarks from editing in word

我有很多帶有很多書簽的Word文檔。 我使用VBA代碼通過數據庫中的數據更改這些書簽。

問題是,有時用戶需要編輯這些文檔,並且他們往往會意外刪除/更改我的書簽,這導致VBA代碼不再能夠識別書簽。

因此,基本上,我想知道的是如何限制用戶編輯Word文檔中的書簽。

我不需要一個超級安全的解決方案,只需提供足夠的保護,以使用戶知道“我不應該碰這部分”。

預先感謝您的答復。

編輯:

我在不同的論壇上閱讀,發現了這一點,

http://social.msdn.microsoft.com/Forums/office/zh-CN/f70ca604-bbdb-4b5a-8363-f9e126105e91/writeprotection-of-bookmarks-in-word?forum=vsto

我想要哪種。 但無法實現/將其轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM