Excel – 将工作表视图限制为certian用户

我有一个包含几个工作表的Excel工作簿。

我想要做的是有一个像用户forms的机制,或者用户可以向几个可能的用户之一进行身份validation的机制。

基于提供的用户名,我想显示某些工作表并隐藏其他工作表,并阻止用户访问工作表,他们不应该能够查看。

有没有人在Excel中做过这样的事情?

任何想法都赞赏肖恩

我真的很喜欢打这个的任务。 请记住,VBE没有在这个代码保护,所以你可能想要添加一些保护,但这应该做你所需要的。

您还应该创build一个通用的Login工作表。 这将是input密码之前唯一打开的工作表。 这是非常重要的,因为您无法隐藏每个表单而不会抛出错误。 (你需要有一个可见的工作表)。

警告:此代码经过适度testing。 对于使用下面的代码的任何数据丢失负责,例如(但不限于)忘记密码。 你被警告了!!!!

1.打开工作簿,然后调用GetLogin

 Option Explicit Private Sub Workbook_Open() GetLogin 1 End Sub 

2.login代码

 Private Sub GetLogin(ByVal AttemptNumber As Integer) Dim Sheet As Worksheet With ThisWorkbook.Worksheets("Login") .Visible = xlSheetVisible .Activate End With For Each Sheet In ThisWorkbook.Sheets If Not Sheet.Name = "Login" Then Sheet.Visible = xlSheetVeryHidden End If Next Sheet Dim Password As String Password = Application.InputBox("Please enter your password") Select Case Password Case "Ma$terPas$" For Each Sheet In ThisWorkbook.Sheets Sheet.Visible = xlSheetVisible Next Sheet ThisWorkbook.Worksheets(1).Activate 'For when you hide login sheet Case "Oth3Rpa$$" With ThisWorkbook .Worksheets(1).Visible = xlSheetVisible End With ThisWorkbook.Worksheets(1).Activate 'For when you hide login sheet Case Else If AttemptNumber <= 3 Then If MsgBox("You entered an incorrect password", vbRetryCancel, "Attempt # " & AttemptNumber) = vbRetry Then AttemptNumber = AttemptNumber + 1 GetLogin AttemptNumber Else ThisWorkbook.Saved = True ThisWorkbook.Close End If Else ThisWorkbook.Saved = True ThisWorkbook.Close End If End Select ThisWorkbook.Worksheets("Login").Visible = xlSheetHidden End Sub 

3.closures工作簿

 Private Sub Workbook_BeforeClose(Cancel As Boolean) If ThisWorkbook.Saved = False Then If MsgBox("Would you like to save?", vbYesNo) = vbYes Then ThisWorkbook.Save End If End If Dim Sheet As Worksheet With ThisWorkbook.Worksheets("Login") .Visible = xlSheetVisible .Activate End With For Each Sheet In ThisWorkbook.Sheets If Not Sheet.Name = "Login" Then Sheet.Visible = xlSheetVeryHidden End If Next Sheet 'Prevent from being asked to save the fact you just hid the sheets ThisWorkbook.Saved = True End Sub 

确保Workbook_OpenWorkbook_Close位于您的工作簿模块中。

您可能可以通过使用Auto_Open事件来实现这一点

 Function Auto_Open() Select Case True Case InStr(Application.UserName, "Dan Smith") > 0 ActiveWorkbook.Sheets(1).Visible = xlSheetVeryHidden Case InStr(Application.UserName, "Jon Doe") > 0 ActiveWorkbook.Sheets(1).Visible = True End Select End Function 

当然,这需要很多工作,因为你必须找出每个人的用户名,然后找出你想隐藏的表格,但这就是我想到的