excel - 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 行,如果它们被隐藏,它将取消隐藏它们。
我会寻找一种方法让程序知道何时单击与子帐户相关的行并跳过此类行的操作。如果您有这样的标准,请在之前的代码中建立它,If Not Application.Intersect(Target, Rng) Is Nothing Then
然后将其包含在同一行中。但是,就像现在的代码一样,点击错误的行不会有任何大的惩罚。只需双击即可撤消操作。
推荐阅读
- java - 如何从 ByteArrayInputStream 创建 MappedByteBuffer?
- c# - 异步任务的单元测试
- rabbitmq - 使用rabbitfixture在CentOS 7上启动rabbitmq(3.7.3)服务器时初始化终止
- javascript - 为什么 Chrome 会在内存中保留匿名 MediaRecorder 对象?
- c++ - c++中的异常处理错误
- crystal-reports - 将当前日期转换为第 n 个日期
- google-cloud-platform - Google Cloud 上的错误 - 基因组学:“未找到服务名称的 API 解决方案:基因组学”
- r - 当数据集在 sparklyr 中时,为什么我不能在 dplyr 中使用双冒号运算符?
- javascript - 与单击的 td 相比,如何选择第一个 td
- jquery - 根据下拉选择启用对话框按钮