如何在Excel中使用按钮隐藏工作表?

时间:2016-05-03 21:59:15

标签: excel vba excel-vba

我想创建一个隐藏工作表的按钮。理想情况下,它会隐藏按钮所在的工作表。

简单来说,表1有一个表格可以填写。典型的名称,地址,电话号码等。第2页和第3页也有相同的字段,这些字段将被引用到'数据'标签也是如此。在名为' Data'的工作表中,我将添加仅使用=选项填充的字段(= Data!...)

但是,添加信息后,我不希望数据页面在视图中。我们都知道简单的右键单击和隐藏表。但有时候对于那些使用这张表的人来说太过分了,漂亮的按钮会更好。

我成功使用: 第1单元

Sub SheetCommand()
If Worksheets("Sheet1").Range("C2").Value <> vbNullString Then
Worksheets("Sheet2").Visible = False
Else
Worksheets("Sheet2").Visible = True
End If
End Sub

Sheet1代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$2" Then Exit Sub
Run "SheetCommand"
End Sub

然而,我并不是非常精通VB并且已经走到了尽头。有人可以帮我告诉我如何将其应用于按钮吗?我并不希望它引用示例中提到的$ C $ 2字段,但只要有人按下按钮,工作表就会消失。我并不担心得到它,因为有人可以准备好以老式的方式。这将有助于本手册的数据输入过程变得更加容易。

编辑:基本上,我需要帮助创建一个可以隐藏页面的vba代码。我想创建一个按钮,一旦点击,它就会隐藏该页面。我展示了一个代码示例,我将其运行,但只有在填充该单元格时才有效。如何使按钮点击工作?

我发现这个代码能够满足我的需要,但我想告诉它一个特定的工作表名称而不必在B6和B7中输入它。

Sub ShowHideWorksheets()
Dim Cell As Range
For Each Cell In Range("B6:B7")
ActiveWorkbook.Worksheets(Cell.Value).Visible = Not
ActiveWorkbook.Worksheets(Cell.Value).Visible
Next Cell
End Sub

1 个答案:

答案 0 :(得分:0)

实际上我不太清楚你的目标是什么

例如,假设“Sheet 2”和“Sheet2”指向同一张纸,在您的问题中,您似乎将其称为“Form”表(“...表1有一个表格填写.... 表2 和3也有相同的字段...“)和”数据“表(Worksheets("Sheet2").Visible = False

所以这里遵循一些可能的解决方案:

1)您希望在关闭

中包含的工作簿之前隐藏“数据”表

然后将以下代码放在包含“数据”表

的工作簿的“ThisWorkbook”代码窗格中
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Worksheets("Data").Visible = False
End Sub

2)一旦在“数据”以外的任何工作表中填写了一些单元格,您想要隐藏“数据”表单

然后将以下代码放在包含“数据”表

的工作簿的“ThisWorkbook”代码窗格中
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "Data" Then
        With Sh
            'here follows code to check if "the information is added"
            'for instance:
            If WorksheetFunction.CountA(.Range("A2:C2")) = .Range("A2:C2").Count Then ThisWorkbook.Worksheets("Data").Visible = False 'check if all cells in range "A2" to "C2" has been filled with some data
        End With
    End If
End Sub

3)您想要在“数据”以外的所有工作表中填写某些单元格后隐藏“数据”表单

然后将以下代码放在包含“数据”表

的工作簿的“ThisWorkbook”代码窗格中
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim sht As Worksheet
    Dim hideBool As Boolean: hideBool = True 'set initial value as true

    If Sh.Name <> "Data" Then
        For Each sht In ThisWorkbook.Worksheets
            With Sh
                'here follows code to check if "the information is added"
                'for instance:
                hideBool = hideBool And WorksheetFunction.CountA(.Range("A2:C2")) = .Range("A2:C2").Count ''check if all cells in range "A2" to "C2" of current sheet has been filled with some data
            End With
            If Not hideBool Then Exit For
        Next sht
        ThisWorkbook.Worksheets("Data").Visible = Not hideBool ' hide if ALL sheets met "information is added" condition
    End If
End Sub

4)否则提供有关所需行为的更多信息