Vba 如何在Excel中隐藏带有按钮的工作表?

Vba 如何在Excel中隐藏带有按钮的工作表?,vba,excel,Vba,Excel,我想创建一个按钮来隐藏工作表。理想情况下,它会隐藏按钮所在的页面 简单地说,表1有一个表格要填写。典型的姓名、地址、电话号码等。第2页和第3页也有与“数据”选项卡相同的字段。在名为“Data”的工作表上,我将添加一些字段,这些字段将简单地用=选项填充,如(=Data!…) 但是,我不希望在添加信息后查看数据页。我们都知道简单的右键单击和隐藏工作表。但有时这对一些使用这张表的人来说太多了,一个漂亮的按钮会更好 我成功地使用了: 单元1 我其实不太清楚你的确切目标是什么 例如,假设“工作表2”和“工

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

简单地说,表1有一个表格要填写。典型的姓名、地址、电话号码等。第2页和第3页也有与“数据”选项卡相同的字段。在名为“Data”的工作表上,我将添加一些字段,这些字段将简单地用=选项填充,如(=Data!…)

但是,我不希望在添加信息后查看数据页。我们都知道简单的右键单击和隐藏工作表。但有时这对一些使用这张表的人来说太多了,一个漂亮的按钮会更好

我成功地使用了: 单元1


我其实不太清楚你的确切目标是什么

例如,假设“工作表2”和“工作表2”指向同一张工作表,在您的问题中,您似乎将其称为“表格”工作表(“工作表1有一张表格要填写…”和“数据”工作表(
工作表(“工作表2”)。可见=假

因此,以下是一些可能的解决方案:

1) 您想在关闭包含“数据”工作表的工作簿之前隐藏该工作表

然后将以下代码放在包含“数据”表的工作簿的“ThisWorkbook”代码窗格中

2) 在“数据”以外的任何工作表中填充某些单元格后,您希望隐藏“数据”工作表

然后将以下代码放在包含“数据”表的工作簿的“ThisWorkbook”代码窗格中

Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
如果Sh.名称为“数据”,则
与Sh
'下面的代码检查是否“添加了信息”
例如:
如果工作表function.CountA(.Range(“A2:C2”)=范围(“A2:C2”)。计数,则此工作簿.Worksheets(“Data”).Visible=False'检查范围“A2”到“C2”中的所有单元格是否已填充了一些数据
以
如果结束
端接头
3) 在除“数据”之外的所有工作表中填充某些单元格后,您希望隐藏“数据”工作表

然后将以下代码放在包含“数据”表的工作簿的“ThisWorkbook”代码窗格中

Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
将sht变暗为工作表
将hideBool设置为布尔值:hideBool=True'将初始值设置为True
如果Sh.名称为“数据”,则
用于此工作簿中的每个sht。工作表
与Sh
'下面的代码检查是否“添加了信息”
例如:
hideBool=hideBool和工作表函数.CountA(.Range(“A2:C2”))=.Range(“A2:C2”)。Count''检查当前工作表“A2”到“C2”范围内的所有单元格是否都已填充了一些数据
以
如果不是hideBool,则退出
下一步
ThisWorkbook.Worksheets(“数据”).Visible=如果所有工作表都满足“信息已添加”条件,则不隐藏“隐藏”
如果结束
端接头

4) 否则,请提供有关所需行为的详细信息

插入按钮,右键单击,为其指定宏?您所描述的设置不适合使用寿命。如果此表单持续使用数月或数年,隐藏工作表的数量和对这些隐藏工作表的引用的数量将增加到一个巨大的数字,这可能会大大降低工作簿的速度,并且绝对会使工作表上的任何人都非常难以操作,尤其是在需要更新/更改时。为什么不让用户直接在数据表的新一行输入他们的数据呢?@tigeravatar有些用户在销毁数据表时会让你哭泣。但你说得很好。OP应该只隐藏
数据
工作表,而让按钮将工作表1上输入的内容发送到
数据
的最后一行+1,这是一个模板工作簿。填写、保存、发送电子邮件,然后再次使用模板。我用一个客户的信息填写excel表格,但该文件不再使用。我发现了一个代码,其中有些代码是有效的。我怎样才能让这个代码只说出一个工作表名称,而不是键入B6和B7?Sub ShowHideWorksheets()将单元格设置为范围(“B6:B7”)ActiveWorkbook中每个单元格的范围。工作表(Cell.Value)。可见=非ActiveWorkbook。工作表(Cell.Value)。可见下一个单元格结束子感谢您花时间填写响应。我最难解释我的想法。我认为可能很清楚的是,对其他人来说常常是令人困惑的。我会尽量解释得更好。我使用Excel填写表格,然后通过电子邮件发送给其他人。我计划在文档中创建第四张表单,自动填充其他三张表单中的字段。例如,我创建了一个工单编号,并将其放在所有三张图纸上。我的解决方案是创建一个第四页,用户可以在其中输入信息,以填充其余字段。因此,如果我制作WO12345,它位于所有3页上,一旦他们填写了第4页,我想创建一个可以隐藏该页的按钮。所有的信息都会在那里,只是隐藏起来。因为一旦发送给下一个人,他们可能会对第四张表格感到困惑,并可能导致工作流程问题。填写第四张表格的人并不精通excel,右键单击并隐藏表格太多。。。。。。因此,一个解决方案是一个按钮,一旦他们填写,它可以隐藏它。
Sub SheetCommand()
If Worksheets("Sheet1").Range("C2").Value <> vbNullString Then
Worksheets("Sheet2").Visible = False
Else
Worksheets("Sheet2").Visible = True
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$2" Then Exit Sub
Run "SheetCommand"
End Sub
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
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Worksheets("Data").Visible = False
End Sub
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
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