如何使用按钮隐藏其他工作表中的行

时间:2018-10-08 12:08:12

标签: excel-vba

我正在尝试使用按钮在另一张纸中隐藏几行。目的是在需要时使用按钮隐藏行,以使这些行的格式和内容保持不变。目前,我删除了那些会破坏格式并需要重做的行。

我也不了解VBA,所以请原谅我的无知。

Sub Macro() 
    Rows("7:9").Select 
    If Rows("7:9").Hidden=True Then 
        Selection.EntireRow.Hidden=False 
    Else 
        Selection.EntireRowRow.Hidden=True 
    End If 
End Sub

1 个答案:

答案 0 :(得分:1)

您的代码将隐藏/取消隐藏活动表上的行。

要在特定工作表上执行此操作,您需要说明行所在的工作表-并且您无需选择行即可执行 操作,这意味着您无法使用Selection

语法也必须准确无误-因此.EntireRowRow将永远无法使用。

在代码中,我使用了With...End With语句来缩短代码。

Sub Macro()
    With Worksheets("Sheet1").Rows("7:9")
        If .Hidden = True Then
            .EntireRow.Hidden = False
        Else
            .EntireRow.Hidden = True
        End If
    End With
End Sub  

不使用With看起来像这样:

Sub Macro()
    If Worksheets("Sheet1").Rows("7:9").Hidden = True Then
        Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = False
    Else
        Worksheets("Sheet1").Rows("7:9").EntireRow.Hidden = True
    End If
End Sub

通过将TRUE交换为FALSE,反之亦然,可以进一步缩短代码。

Sub Macro()
    With Worksheets("Sheet1").Rows("7:9")
        .EntireRow.Hidden = Not .EntireRow.Hidden
    End With
End Sub

Not运算符将布尔TRUE切换为FALSE,将FALSE切换为TRUE。
.EntireRow.Hidden将返回TRUE或FALSE,因此Not .EntireRow.Hidden将返回相反的值。

如果要运行可见行的索引,可以使用SUBTOTAL函数对包含值的可见单元进行计数。
假设B列中的所有单元格都包含一个值,并使用小计COUNTA函数。
键入A2的公式将是:=SUBTOTAL(103, $B$1:$B2)并向下拖动。
请注意,第二个单元格引用使用相对引用作为行号-向下拖动时,公式将更新为=SUBTOTAL(103, $B$1:$B3) ... $B$1:$B4,依此类推。函数中的103表示计数中不包含隐藏的单元格。

要将其添加到您要更新的代码中:

Sub Macro()
    With Worksheets("Sheet1")

        'A2:A & last row
        'OFFSET(,-1) is used so it counts values in column B to find the last row
        'and then references column A for the final range.
        With .Range("A2", .Cells(.Rows.Count, 2).End(xlUp).Offset(, -1))
            .FormulaR1C1 = "=SUBTOTAL(103, R1C2:RC2)"
        End With

        With .Rows("7:9")
            .EntireRow.Hidden = Not .EntireRow.Hidden
        End With

    End With
End Sub