使用命令按钮逐行取消指定区域行隐藏时出现批量取消问题求助
解决VBA命令按钮逐行取消行隐藏失效问题
你的代码问题出在同时嵌套使用For循环和Do循环,变量i被两个循环同时修改,导致运行时逻辑混乱——调试时单步执行能按预期走,但实际运行时循环会一次性遍历完所有行,把所有隐藏行都取消了。另外代码里的Cancel = True完全没用,CommandButton的Click事件不支持这个参数。
修正后的代码如下:
Private Sub CommandButton1_Click() Dim targetRow As Integer Dim foundHidden As Boolean ' 遍历目标区域的行(18到41行) For targetRow = 18 To 41 If Rows(targetRow).Hidden = True Then ' 找到第一个隐藏行,取消隐藏 Rows(targetRow).Hidden = False foundHidden = True Exit For ' 只处理一行就退出循环 End If Next targetRow ' 如果遍历完所有行都没找到隐藏行,弹出提示 If Not foundHidden Then MsgBox "已无剩余小时工记录行可显示" End If End Sub
改动说明:
- 移除了嵌套的Do循环,改用单一For循环遍历目标行,找到第一个隐藏行就取消隐藏并立即退出循环,确保每次点击只处理一行。
- 新增
foundHidden变量跟踪是否找到隐藏行,避免原代码中判断i=41的逻辑漏洞(比如第41行本身就是隐藏行的情况)。 - 删除了无效的
Cancel = True语句。
内容的提问来源于stack exchange,提问作者Danica Jacobsson
相关产品推荐
相关产品推荐

