【问题标题】:VBA Hide/Unhide 3 rows below active cellVBA隐藏/取消隐藏活动单元格下方的3行
【发布时间】:2021-02-18 18:05:26
【问题描述】:

我的以下代码运行良好,但是我有很多子帐户(例如“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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我建议这个代码:-

    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 之前的代码中建立它,然后将其包含在同一行中。但是,就像现在的代码一样,点击错误的行不会有任何大的惩罚。只需双击即可撤消操作。

    【讨论】:

    • 哦,Variatus 太棒了,非常感谢。我知道范围,但我无法添加它,范围的名称是“Detail_Accounts_20_21”,是否也可以添加多个范围,如 Detail_Accounts_21_22 等?
    • 没有。它应该是通用描述,例如单击的单元格是否为空白(或有数字)或同一行的 C 列是否有日期 - 所有主帐户行与所有子帐户行不同的一些标准。
    • 有道理,非常感谢 Variatus 完美。
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    相关资源
    最近更新 更多