excel - VBA自定义密码保护超过1张
问题描述
我目前正在处理一个启用宏的 Excel 工作表,有多个选项卡(我想在 9 个选项卡上执行此操作,但出于问题的目的,我只包括 2 个),并且对于每个选项卡我想要添加与我在代码中指定的内容相匹配的密码提示。
这工作正常,但我的问题是,当两张工作表在实际工作表选项卡上彼此相邻时,它将通过它们而不是隐藏第一个,直到我输入正确的密码。
例如,在我的工作表上,我有一个名为 Cascada 的选项卡,然后是一个名为 Cascada2 的选项卡。如果我在这两者之间放置一个空白标签,那么我的代码将正常工作。但是,当它们按顺序排列时,无论我是否输入正确的字符串,它似乎都会经历密码提示的顺序。
请参阅下面的代码,任何建议将不胜感激。
谢谢。
编辑更新了答案
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.EnableEvents = False
Dim cascada As String, cascada2 As String
cascada = "Config_Cascada"
Rhea = "Config_Rhea"
Select Case Sh.Name
Case cascada, cascada2
Dim pwd As String
pwd = "cascada" & IIf(Sh.Name = cascada2, 2, "")
Dim Response As String
Response = InputBox("Enter password to view sheet")
If Response = pwd Then
Sh.Select
Else
Worksheets("Doors").Activate
End If
End Select
Select Case Sh.Name
Case Rhea
Dim pwdRhea As String
pwdRhea = "rhea"
Dim ResponseRhea As String
ResponseRhea = InputBox("Enter password to view sheet")
If Response = pwdRhea Then
Sh.Select
Else
Worksheets("Doors").Activate
End If
End Select
Application.EnableEvents = True
End Sub
解决方案
试一试。据我测试,更清洁且有效:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Application.EnableEvents = False
Dim cascada As String, cascada2 As String
cascada = "config_Cascada"
cascada2 = "config_Cascada2"
Select Case Sh.Name
Case cascada, cascada2
Dim pwd As String
pwd = "cascada" & IIf(Sh.Name = cascada2, 2, "")
Dim Response as String
Response = InputBox("Enter password to view sheet")
If Response = pwd Then
Sh.Select
End If
End Select
Application.EnableEvents = True
End Sub
推荐阅读
- phpstorm - 在 PhpStorm 中搜索实时模板
- javascript - 如何使用 ejs 和 node 制作模态框
- swift - 如何从 Swift 中的不同类调用函数?
- android - XING - 如何在 iOS 上的 Android 上进行深度链接?
- linux - 如何使用文件名中的通配符从 chown 递归中排除文件?
- linux - 循环内部中断的奇怪行为
- reflection - “控制器不存在。反思失败。” TYPO3 v2
- flutter - 如何在 PositionedTransition 小部件中放置一个可以正常工作的小部件
- python - 在 python 中读取单个命令后,串口被占用
- reactjs - 从 .env 文件中获取我的身份验证密钥,但它缺少字符