Excel VBA求助:按B列P1/P2隐藏中间行后无法恢复显示
修复Excel VBA按钮切换隐藏/显示行的功能
你的代码当前仅能实现隐藏P1和P2之间行的功能,无法切换显示状态,核心问题是缺少状态判断逻辑,且原遍历整列的查找方式效率偏低。以下是修复并优化后的代码:
Private Sub CommandButton1_Click() Dim ws As Worksheet Dim p1Cell As Range, p2Cell As Range Dim targetRows As Range ' 指定目标工作表 Set ws = ThisWorkbook.Sheets("Calculatie") ' 快速定位B列第一个"P1" Set p1Cell = ws.Range("B:B").Find(What:="P1", LookIn:=xlValues, LookAt:=xlWhole) ' 如果找到P1,再从P1下一行开始查找后续第一个"P2" If Not p1Cell Is Nothing Then Set p2Cell = ws.Range("B" & p1Cell.Row + 1 & ":B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row).Find(What:="P2", LookIn:=xlValues, LookAt:=xlWhole) End If ' 验证是否找到有效P1和P2 If Not p1Cell Is Nothing And Not p2Cell Is Nothing Then ' 定义P1与P2之间的行范围 Set targetRows = ws.Rows(p1Cell.Row + 1 & ":" & p2Cell.Row - 1) ' 切换行的隐藏状态:当前隐藏则显示,当前显示则隐藏 targetRows.EntireRow.Hidden = Not targetRows.EntireRow.Hidden Else MsgBox "B列中未找到P1或对应的P2" End If End Sub
关键修改说明:
- 高效查找:用
Find方法替代整列遍历,大幅提升查找效率,尤其适合数据量大的表格 - 状态切换:通过
Not targetRows.EntireRow.Hidden实现一键切换,无需额外分支判断 - 范围修正:正确构建P1与P2之间的行范围,避免原代码中Range定义错误导致的报错
- 边界控制:查找P2时从P1下一行开始,避免匹配到P1之前的无效P2,同时限制查找范围到B列最后有数据的行,减少无效操作
内容的提问来源于stack exchange,提问作者Naga81
相关产品推荐
相关产品推荐

