Excel跨工作表基于取值用VBA隐藏/显示指定表格整行
Excel表格分类显示切换VBA实现方案
前置配置要求
- 新建1个独立工作表,命名为
表格展示控制面板,专门放置3个切换用选项按钮(推荐使用窗体控件,兼容性更好) - 3个选项按钮分别命名为「显示全部表格」「仅显示可编辑表格」「仅显示不可编辑表格」
- 原有表格保留原有绿色(可编辑)、红色(不可编辑)标识即可,无需额外调整表格内容
VBA代码放置位置
- 按快捷键
Alt+F11打开Visual Basic编辑器 - 在左侧工程资源管理器中右键点击当前工作簿名称,选择【插入】-【模块】,所有通用切换逻辑代码都放在这个新建的标准模块中
- 如果需要打开文件时默认加载显示全部表格的效果,额外双击左侧工程资源管理器中的
ThisWorkbook对象,将对应触发代码粘贴到该对象的代码窗口中
完整VBA代码
标准模块内粘贴的代码
' 初始化过程:关闭屏幕更新提升运行速度,重置当前表所有行的显示状态 Private Sub InitProcess(ws As Worksheet) Application.ScreenUpdating = False ws.Cells.EntireRow.Hidden = False End Sub ' 绑定到「显示全部表格」按钮 Sub ShowAllTables() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If ws.Name <> "表格展示控制面板" Then InitProcess ws End If Next ws Application.ScreenUpdating = True End Sub ' 绑定到「仅显示可编辑表格」按钮 Sub ShowEditableTablesOnly() Dim ws As Worksheet Dim usedRng As Range, rowCell As Range ' 可编辑表格标识色为绿色RGB(0,255,0),如果你的绿色色值不同可自行修改 Const EditableColor As Long = RGB(0, 255, 0) For Each ws In ThisWorkbook.Worksheets If ws.Name <> "表格展示控制面板" Then InitProcess ws Set usedRng = ws.UsedRange ' 逐行判断标识列单元格填充色,非绿色标识的行全部隐藏 For Each rowCell In usedRng.Columns(1).Cells If rowCell.Interior.Color <> EditableColor And Not IsEmpty(rowCell) Then rowCell.EntireRow.Hidden = True End If Next rowCell End If Next ws Application.ScreenUpdating = True End Sub ' 绑定到「仅显示不可编辑表格」按钮 Sub ShowNonEditableTablesOnly() Dim ws As Worksheet Dim usedRng As Range, rowCell As Range ' 不可编辑表格标识色为红色RGB(255,0,0),色值不同可自行修改 Const NonEditableColor As Long = RGB(255, 0, 0) For Each ws In ThisWorkbook.Worksheets If ws.Name <> "表格展示控制面板" Then InitProcess ws Set usedRng = ws.UsedRange ' 逐行判断标识列单元格填充色,非红色标识的行全部隐藏 For Each rowCell In usedRng.Columns(1).Cells If rowCell.Interior.Color <> NonEditableColor And Not IsEmpty(rowCell) Then rowCell.EntireRow.Hidden = True End If Next rowCell End If Next ws Application.ScreenUpdating = True End Sub
ThisWorkbook对象内粘贴的可选代码(打开文件默认显示全部表格)
Private Sub Workbook_Open() Call ShowAllTables End Sub
控件绑定与操作说明
- 回到Excel主界面,右键点击控制面板里的选项按钮,选择【指定宏】,选中对应名称的宏后点确定即可完成绑定
- 保存文件时必须选择
*.xlsm(启用宏的工作簿)格式,否则VBA代码会丢失,切换功能无法使用 - 代码默认判断每行第一个单元格(A列)的填充色作为表格类型依据,如果你的颜色标识在其他列,把代码里
usedRng.Columns(1)的数字改成对应的列号即可,比如标识在B列就改成2 - 如果你的表格标识色不是标准纯绿/纯红,可以取色后替换代码里对应的RGB色值:右键带颜色的单元格选【设置单元格格式】-【填充】,就能看到对应的色值参数
操作界面参考
- 控制面板工作表布局:3个选项按钮纵向排列在工作表左上区域,可按需添加操作说明文字
- 切换效果:点击对应按钮后,所有存放表格的工作表会自动整行隐藏不符合筛选规则的表格,仅保留选中类型的表格显示
内容的提问来源于stack exchange,提问作者Mārtiņš Tereško
相关产品推荐
相关产品推荐

