如何将Long变量Last定义为Range区域SortRng的最后已用行号?
VBA代码问题排查与修复
问题核心分析
你当前代码获取SortRng最后行号的语句存在逻辑冗余与语法问题,同时代码中错误的End语句会直接终止程序运行,导致功能失效:
SortRng是固定26行的区域(通过Resize(26,2)定义),End(xlDown)会直接定位到该区域最后一行,但后续的Resize(, .Columns.Count)完全多余,既不改变行号还可能引发语法报错- 两处
End语句会强制终止程序,使得GameRng的遍历循环无法完整执行
修复后的完整代码
For Each thisCellInGame In GameRng If thisCellInGame.Value = "Game On!" Then Set SortRng = thisCellInGame.Offset(2, 3).Resize(26, 2) ' 直接计算SortRng的最后一行行号 Last = SortRng.Row + SortRng.Rows.Count - 1 first = Last - 25 ' 倒序遍历避免删除行后索引混乱 For i = Last To first Step -1 If Cells(i, "E").Value = "" And Cells(i, "I").Value = "" And Cells(i, "M").Value = "" Then Cells(i, "A").EntireRow.Delete End If Next i End If Next thisCellInGame
关键修改说明
- 移除冗余的
With SortRng块,通过SortRng.Row + SortRng.Rows.Count -1直接计算固定区域的最后行号,这是可靠且高效的方式 - 删除两处错误的
End语句,确保遍历循环能完整执行所有符合条件的单元格 - 统一变量名大小写(
first),避免VBA变量名混淆(VBA不区分大小写,但统一风格提升可读性)
内容的提问来源于stack exchange,提问作者Faminebob
相关产品推荐
相关产品推荐

