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

我建议使用以下代码:-

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行可见,它将隐藏它们;如果3行隐藏,它将取消隐藏它们。

我想找一种方法让程序知道何时单击了与子帐户相关的行,并跳过对这些行的操作。如果您有这样一个标准,请在If Not Application.Intersect(Target, Rng) Is Nothing Then之前的代码中建立它,然后将它包含在同一行中。然而,按照现在的代码,点击错误的行不会受到任何大的惩罚。撤消操作只需双击一次。