首页 > 解决方案 > VBA隐藏/取消隐藏活动单元格下方的3行

问题描述

我的以下代码运行良好,但是我有太多子帐户(例如“Ads_20_21”),我必须多次复制代码并创建新的命名范围,基本上只是隐藏/取消隐藏下面的 3 行对于每个子帐户。是否有一个代码可以分配给一个按钮,该按钮将隐藏/取消隐藏活动单元格下方的 3 行,我尝试到处寻找帮助,但没有运气。非常感谢任何帮助。

Sub ToggleHiddenRow(rng As Range)
  With rng.EntireRow
    .Hidden = Not .Hidden
  End With
End Sub

Sub Ads_20_21()
    ToggleHiddenRow ActiveSheet.Range("Advertising_20_21")
End Sub

标签: excelvba

解决方案


我建议这个代码: -

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    Const TriggerClm        As String = "A"         ' change to suit
    Const FirstDataRow      As Long = 2             ' change to suit
    Const RowsToHide        As Long = 3             ' change to suit
    Dim Rng                 As Range
    
    Set Rng = Range(Cells(FirstDataRow, TriggerClm), Cells(Rows.Count, TriggerClm).End(xlUp))
    If Not Application.Intersect(Target, Rng) Is Nothing Then
        Set Rng = Range(Rows(Target.Row + 1), Rows(Target.Row + RowsToHide + 1))
        Rng.Rows.Hidden = Not Rng.Rows(1).Hidden
        Cancel = True
    End If
End Sub

这是一个响应双击事件的事件过程,这意味着它在您双击单元格时运行。该事件将仅在您希望对其执行操作的工作表的代码模块中被记录。因此,程序必须安装在该模块中,而不是其他任何地方。由于此模块与工作表上发生的事情的特殊连接,Excel 在创建选项卡时设置了此模块。使用现有模块,而不是您自己插入的模块。

代码顶部的 3 个常量供您调整。确定要双击的列、第一个数据行和要隐藏/显示的行数,从双击行下方的行开始。当您双击另一列或第一数据行上方时,该过程将不会运行。当它运行时,如果它们是可见的,它将隐藏 3 行,如果它们被隐藏,它将取消隐藏它们。

我会寻找一种方法让程序知道何时单击与子帐户相关的行并跳过此类行的操作。如果您有这样的标准,请在之前的代码中建立它,If Not Application.Intersect(Target, Rng) Is Nothing Then然后将其包含在同一行中。但是,就像现在的代码一样,点击错误的行不会有任何大的惩罚。只需双击即可撤消操作。


推荐阅读