关闭工作簿时隐藏特定工作表

时间:2015-08-05 07:30:47

标签: vba excel-vba excel

我正在创建一些应该执行以下操作的VBA代码:

  1. 用户按下按钮a需要输入代码。
  2. 当输入正确的代码时,团队相关代码可以访问某些工作表。
  3. 他们可以访问的工作表根据他们输入的团队编号和代码而有所不同。所以当他们输入密码“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
    

    关于上述代码的两个问题:

    1. 当用户关闭文档时,所有工作表应该再次“消失”。有人知道怎么做这个吗?因此,在打开文档表时,“Team_1”和“Team_1_sub”应该是标准的

      Worksheets("Team_1").Visible = False
      Worksheets("Team_1_sub").Visible = False
      
    2. 你们可以给我一些反馈,说明我上面的程序(不同的if语句提示用户输入密码,然后查看某些标签)是否是达到我目标最有效的方法?最终目标是确保某个团队负责人只能看到某些表格。

3 个答案:

答案 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 ...在另一种情况下你无条件地隐藏了这张表...因为隐藏/取消隐藏只有两个简单的条件。