[英]VBA Hide/Unhide 3 rows below active cell
我有下面的代码运行良好,但是我有太多的子帐户(如“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 行(如果它们可见)或取消隐藏(如果它们被隐藏)。
我会寻找一种方法让程序知道何时单击与子帐户相关的行并跳过此类行的操作。 如果您有这样的标准,请在If Not Application.Intersect(Target, Rng) Is Nothing Then
之前在代码中建立它,然后将其包含在同一行中。 然而,正如现在的代码一样,点击错误的行不会有任何大的惩罚。 撤消操作只需双击即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.