我正在创建一些应该执行以下操作的VBA代码:
他们可以访问的工作表根据他们输入的团队编号和代码而有所不同。所以当他们输入密码“banana”时:表单“Team_1”& Team_1_sub
变得可见。
我现在创建了以下代码来实现此目的:
Sub filter_tabs()
Dim answer As String
answer = InputBox("Please enter your password")
If answer = "Password" Then
MsgBox "Correct, je krijgt nu de goede tabs te zien!"
Worksheets("Team_1").Visible = True
Worksheets("Team_1_sub").Visible = True
Else
MsgBox "Wrong password"
End If
End Sub
关于上述代码的两个问题:
当用户关闭文档时,所有工作表应该再次“消失”。有人知道怎么做这个吗?因此,在打开文档表时,“Team_1”和“Team_1_sub”应该是标准的
Worksheets("Team_1").Visible = False
Worksheets("Team_1_sub").Visible = False
你们可以给我一些反馈,说明我上面的程序(不同的if语句提示用户输入密码,然后查看某些标签)是否是达到我目标最有效的方法?最终目标是确保某个团队负责人只能看到某些表格。
答案 0 :(得分:2)
此处设置可见的false,您可以使用Workbook_BeforeClose
方法,如下所示:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Worksheets("Team_1").Visible = False
Worksheets("Team_1_sub").Visible = False
'must save, if not save, it is not effect.
Me.Save
End Sub
该方法的参考是here。
有一件事是这个方法必须在ThisWorkBook
模块中。
对于下一个问题,您应该更多地说,哪些用户和密码的表格。因为你的代码足够你的问题。它可以用于您的要求。
答案 1 :(得分:1)
由于您没有使用密码,因此至少应使表格VeryHidden
而不是Hidden
- 一般用户更难以取消隐藏。
另一个答案提出的Me.Save
也没有必要。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Worksheets("Team_1").Visible = VeryHidden
Worksheets("Team_1_sub").Visible = VeryHidden
End Sub
答案 2 :(得分:0)
ad 1)
您最好使用Workbook_BeforeSave()
例程对所有工作表的隐藏进行编码...在VBAProject视图中,您可以在ThisWorkbook
下找到它
ad 2)
您发布的代码看起来非常好 - 我关注的是用户名与工作表名称的硬编码。我会考虑使用headers / code / / sheetname / ...将它放在工作表/表中。这样你就可以随时调整你的逻辑,而不必修改代码。
有了这样一张桌子(如果需要的话,一直是隐藏的表格),你可以遍历它(一段代码),并且 - 在输入代码时 - 你取消隐藏If CodeInTable = CodeEntered
...在另一种情况下你无条件地隐藏了这张表...因为隐藏/取消隐藏只有两个简单的条件。