是否可以使用宏锁定每个用户的共享Excel中的单元格?

时间:2016-04-28 09:54:32

标签: excel macros

我正在处理要在SharePoint上共享和打开的Excel工作表(不是在浏览器内编辑)。我知道Excel中有一项功能可以锁定一系列单元格,只有指定的域用户才能编辑。

我的问题是:是否可以在宏中自动化这种锁定机制,这样如果用户编辑了一个空单元格,那么它们就会获得所有权(因此除了它们之外的所有人都会被锁定)并且如果它们清除了单元格然后它会为其他人解锁吗?

1 个答案:

答案 0 :(得分:0)

好的,所以这本身并不是答案,但这是我希望的起点。这可以通过创建用户可编辑范围来实现,并为当前用户分配编辑此单元格的权限。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim userName As String, ws As Worksheet, ual As UserAccessList, aer As AllowEditRange, usr As UserAccess, thisCell As String, rngName As String
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Unprotect
    thisCell = Target.Address
    rngName = Replace(thisCell, "$", "")
    userName = Application.userName
    userName = Replace(userName, " ", ".")
    userName = userName & "@gmail.com"
On Error GoTo Handler
    Set aer = ws.Protection.AllowEditRanges.Add(rngName, Range(thisCell), "pass1")
    Set usr = aer.Users.Add(userName, True)
    ws.Protect
    Exit Sub
Handler:
    MsgBox "Some error somewhere"
    ActiveSheet.Protection.AllowEditRanges(rngName).Delete
End Sub

我只能使用我们的网络电子邮件地址(我为此示例而更改了)。它仅在一个用户上进行测试,如果其他人编辑同一个文件,则不知道它是如何工作的。

我可以预见的大问题是用户保护范围是否有效,工作表必须被锁定,但如果它被锁定,你将无法编辑其他单元格,除非你解锁所有单元格,用户保护的单元格在哪种情况下已过时。