当某个单元格等于100%时,是否有宏来隐藏工作簿中的所有工作表?

时间:2015-08-31 16:41:38

标签: excel excel-vba vba

我理解这背后的逻辑,但我不确定如何改正宏。我将最多63张数据导入excel。

所有工作表在B列第9行中都有状态。我想制作一个宏来隐藏工作簿中的所有工作表,当B9 = 100%时

If Worksheet.Column.B, Row.9= 100%
Worksheet.hide

2 个答案:

答案 0 :(得分:2)

打开VB编辑器 ALT + F11 。在Microsoft Excel Objects下右键点击插入 - >模块。粘贴以下代码。

Option Explicit

Public Sub HideSheets()

        Dim ws As Worksheet

        For Each ws In ThisWorkbook.Worksheets
                If ws.Range("B9").Value = 1 Then
                        ws.Visible = xlSheetHidden
                End If
        Next ws

End Sub

Option Explicit设置会强制您声明变量。我把它包括在内,因为除了良好的编码实践之外,它还节省了我几个小时的调试时间,发现我拼错了一个变量名称(在添加这行代码开始之前会捕获这些错误)。

基本原则是代码使用For..Each循环来遍历工作簿中的每个工作表。如果单元格B9为1(对应于100%),则工作表的Visible属性设置为xlSheetHidden,这会隐藏工作表。如果用户在工作表选项卡上单击鼠标右键并选择Unhide...,则可以取消隐藏具有此可见属性的表单。如果您不希望用户取消隐藏工作表,您可以将其设置为xlSheetVeryHidden,这会隐藏工作表并禁用从工作表中取消隐藏工作表。

要运行此宏,您可以单击代码内的任何位置,然后单击看起来像播放的按钮(这是Run Sub / Userform按钮),或者您可以按 F5

我建议将宏设置为键盘快捷键,或者如果您喜欢位于工作表某处的按钮。

为宏指定键盘快捷键:

  • 在“开发人员”选项卡下,选择“宏”(或只需按 ALT + F8 )以显示“宏”窗口
  • Macro name:下选择您的宏名称(本例中为HideSheets
  • 点击Options...
  • 按下您要按的键以运行宏(在这种情况下,我选择 CTRL + h 进行隐藏)
  • 选择OK
  • 按指定的键盘组合进行测试

此外,您可以指定在单击工作表上的按钮时运行的宏,以执行此操作:

  • 在“开发者”下,转到“插入”下拉列表
  • 在ActiveX控件下,选择命令按钮
  • 在页面的任意位置绘制按钮
  • 右键单击按钮 - > CommandButton对象 - >修改
  • 将按钮文本更改为您想要的任何内容(例如Hide Sheets
  • 双击按钮打开代码,您会看到Sub标题为CommandButton1_Click()
  • HideSheets输入到子程序中(或者子程序的名称)

    Private Sub CommandButton1_Click()
            HideSheets
    End Sub
    
  • 单击“开发人员”选项卡下的“设计模式”

  • 退出设计模式
  • 单击按钮以确保宏功能

答案 1 :(得分:0)

根据Soulfire的回答,您可以在单元格中的值更改值的任何时候自动运行 。只需将以下代码放在工作表(而不是模块)下,只要单元格C9中的值发生变化,就会运行宏“HideSheets”。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address = "$C$9" Then
        Call HideSheets
    End If

End Sub