2015-05-14 56 views
0

我目前正在使用Excel中的项目仪表板,我需要有两层访问权限: - 第1层:管理员。这是密码保护用户不应该触摸的所有单元格。第2层:项目经理这是为了让具有该特定工作表的密码的项目经理可以编辑某些范围。Excel中的多个权限层

本质上我想锁定工作表,但有一个额外的密码来解锁工作表上的几个单元格。

这可能吗?我在这里和谷歌搜索周围环顾四周,但没有发现有用的东西。

谢谢你的时间! Joel

+0

我对VBA很糟糕,我只是一直在搞保护表,保护工作簿和允许用户编辑范围功能。我假设答案在于VBA;我只是不知道从哪里开始。随着向正确的方向推动,我相信我可以弄明白。 –

+0

这是正确的方法。我会做一些保护措施。您需要确保您希望Layer2能够编辑锁定或解锁的单元格,然后保护工作表,以便只能单击锁定或解锁。这样,除了您指定的单元之外,其他所有单元格都将无法编辑 – Sam

回答

1

最简单的入门方法(另一种采用非常干净的管理方式和管理方式)涉及保护整个工作表(并保护它),但有选择性地解锁允许的范围。需要注意的是:所有的单元格必须完全锁定在Workbook_Open上。这可以使用工作簿事件完成(如果您需要帮助,请询问)。

在下面分享的代码中,有几个项目需要注意。 rngAdmin指的是管理员应该访问的单元。同样,rngProjectManager指的是PM应该访问的单元。 sSheetPassword是实际工作表密码,如在Protect Sheet Excel功能中所设置的。另外两个密码只在我们的模块中。显然,所有这些都应该改为更安全的东西。

如果输入管理员密码,则管理员范围将被解锁。如果输入了PM密码,则PM范围解锁。如果输入了不正确的密码,则表格是只读的。思考?

Sub MultipleLayersofProtection() 
    Dim rngAdmin As Range 
    Dim rngProjectManager As Range 
    Dim sUserEnteredPW As String 

    Const sSheetPassword = "yupyupyup" 
    Const sAdminPW As String = "ABC123" 
    Const sProjectManagerPW As String = "LMNOP" 


    Set rngAdmin = Sheet1.Range("A1:C50") 
    Set rngProjectManager = Union(Sheet1.Range("A1:A5"), Sheet1.Range("C1:C5")) 

    sUserEnteredPW = Application.InputBox("Please enter the password:", , , , , , , 2) 

    Select Case sUserEnteredPW 
     Case sAdminPW 
      Sheet1.Unprotect Password:=sSheetPassword 
      rngAdmin.Locked = False 
      Sheet1.Protect Password:=sSheetPassword 
      MsgBox ("Admin Access") 
     Case sProjectManagerPW 
      Sheet1.Unprotect Password:=sSheetPassword 
      rngProjectManager.Locked = False 
      Sheet1.Protect Password:=sSheetPassword 
      MsgBox ("PM Access") 
     Case Else 
      MsgBox ("Read only access") 
    End Select 


End Sub