请求为现有VBA行隐藏/显示代码添加列隐藏/显示功能(未达成目标)
修正并添加列隐藏/显示功能的VBA代码
首先你的原代码存在语法错误:Worksheet_Change事件过程内部嵌套了Hide_Show_Rows子过程,这在VBA中是不允许的。下面是修正后同时支持行、列隐藏/显示的完整代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当C4单元格内容变化时触发,避免不必要的执行 If Not Intersect(Target, Range("C4")) Is Nothing Then Hide_Show_Rows_Columns End If End Sub Sub Hide_Show_Rows_Columns() Dim i As Long ' --- 行相关设置 --- Dim StartRow As Long, EndRow As Long StartRow = 22 ' 行范围起始行,可按需修改 EndRow = 36 ' 行范围结束行,可按需修改 ' --- 列相关设置 --- Dim j As Long Dim StartCol As Long, EndCol As Long StartCol = 5 ' 列范围起始列(5对应E列,可按需修改) EndCol = 12 ' 列范围结束列(12对应L列,可按需修改) ' 处理行的隐藏/显示 For i = StartRow To EndRow If Range("C4").Value = "NEW REGIME" And i >= 22 And i <= 27 Then Rows(i).Hidden = True ElseIf Range("C4").Value = "OLD REGIME" And i >= 29 And i <= 36 Then Rows(i).Hidden = True Else Rows(i).Hidden = False End If Next i ' 处理列的隐藏/显示(示例逻辑,可按需调整) For j = StartCol To EndCol If Range("C4").Value = "NEW REGIME" And j >= 5 And j <= 8 Then Columns(j).Hidden = True ElseIf Range("C4").Value = "OLD REGIME" And j >= 9 And j <= 12 Then Columns(j).Hidden = True Else Columns(j).Hidden = False End If Next j End Sub
关键说明
- 修正了原代码的嵌套Sub语法错误,将行、列处理逻辑整合到独立过程中,通过
Worksheet_Change事件在C4内容变化时自动触发。 - 列部分示例逻辑:当C4为
NEW REGIME时隐藏E-H列(列号5-8),为OLD REGIME时隐藏I-L列(列号9-12),你可以根据实际需求修改列号、列范围和判断条件。 - 列号对应关系:A=1、B=2、C=3,以此类推,直接修改数字即可切换目标列。
- 若不需要自动触发,可直接手动运行
Hide_Show_Rows_Columns过程。
内容的提问来源于stack exchange,提问作者tushar agrawal
相关产品推荐
相关产品推荐

