如何用vba给word文档添加可以编辑的内容区域?

在word中可以通过“审阅”选项卡下的“保护”组中的“限制编辑”命令限制对word文档内容的修改,如下图所示:

如果要将某个word内容区域添加为可以编辑的区域,可以用Range对象的Editors属性返回Editors对象,然后用Editors对象的Add方法添加一个可以编辑的用户。

Editors对象的Add方法语法如下:

expression.Add (EditorID)

其中EditorID参数为要添加的用户的邮箱或者以下常量:

wdEditorCurrent -6 当前文档的当前用户
wdEditorEditors -5 Represents the Editors group for documents that use Information Rights Management.
wdEditorEveryone -1 所有可以打开这个文档的用户
wdEditorOwners -4 Represents the Owners group for documents that use Information Rights Management.

同一个Range对象如果添加了同样EditorID的Editor对象,则该Range对象的Editors集合对象的Count值不会增加,除非添加了不同的用户。

利用这个方法,可以为相同的用户(具有相同的EditorID)添加不同的可以编辑的Range区域。

如果要选中某个用户类型的所有可以编辑的Range区域,可以使用Range对象的 GoToEditableRange 找到第一个可以编辑的Range区域,然后通过返回的Range区域的Editors属性返回其中的一个Editor对象,最后通过Editor对象的SelectAll方法选中该用户的所有可以编辑区域,也可以用DeleteAll方法删除该用户的所有可以编辑区域。

根据上述的知识,可以通过如下的代码为word文档中的不同Range对象添加不同的可以编辑的区域:

Sub QQ1722187970()
    Const wdEditorEveryone = -1
    Const wdEditorCurrent = -6
    Dim oDoc As Document
    Set oDoc = Word.ActiveDocument
    Dim oEditor As Editor
    Dim oRng As Range
    With oDoc
        '为wdEditorEveryone这个用户组添加可以编辑的区域
        .Range(1, 10).Editors.Add (wdEditorEveryone)
        .Range(15, 25).Editors.Add (wdEditorEveryone)
        .Range(58, 75).Editors.Add (wdEditorEveryone)
        Set oEditor = .Content.GoToEditableRange(wdEditorEveryone).Editors(1)
        '选中所有该用户类型的可以编辑的区域
        oEditor.SelectAll
        '删除所有该用户类型的可以编辑的区域
        oEditor.DeleteAll
        .Range(2, 8).Editors.Add (wdEditorCurrent)
        .Range(21, 28).Editors.Add (wdEditorCurrent)
        .Range(12, 18).Editors.Add (wdEditorCurrent)
        Set oEditor = .Content.GoToEditableRange(wdEditorCurrent).Editors(1)
        oEditor.SelectAll
        oEditor.DeleteAll
    End With
End Sub

 

 

       

发表评论