我有一个包含多个工作表的excel工作簿。
我想要做的是拥有一个类似用户表单的机制,或者用户可以向几个可能用户之一进行身份验证的机制。
根据提供的用户名,我想显示某些工作表并隐藏其他工作表,并阻止用户访问他们无法查看的工作表。
有没有人在Excel中做过这样的事情?
任何想法都表示赞赏 肖恩
答案 0 :(得分:2)
您可以通过使用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
当然,考虑到你必须找出每个人的用户名,然后找出你想要隐藏的表格,这需要做很多工作,但这就是我的想法
答案 1 :(得分:2)
我真的很喜欢打字这个的任务。请记住,VBE在此代码中不受保护,因此您可能需要添加一些保护,但这应该可以满足您的需求。
您还应该创建一个通用的Login
工作表。这将是输入密码之前打开的唯一工作表。这是必不可少的,因为您无法隐藏每张工作表而不会抛出错误。 (你需要有1张可见的纸张。)
警告:此代码经过轻度测试。您对使用以下代码的任何数据丢失负责,例如(但不限于)忘记密码。你已被警告!!!!
Option Explicit
Private Sub Workbook_Open()
GetLogin 1
End Sub
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
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_Open
和Workbook_Close
在您的工作簿模块中。