执行VBA嵌套If语句时遇“End if without block if”错误求助
解决VBA中“End if without block if”错误
嘿,这个报错我可太熟悉了!问题根源在于你混用了单行If语句和块级If语句,让VBA编译器摸不清逻辑结构了。
错误原因拆解
你写的最外层If erange.Offset(0, 1).Value = "RTN" Then后面直接跟着另一个If判断,这种写法属于单行If语句(即If...Then后面直接写执行代码,不换行开启块),单行If是不需要配套End If的。但你最后却加了两个End If,编译器找不到对应的块级If来匹配,自然就抛出“End if without block if”错误了。
另外,你里面的一连串If判断也都是单行写法,不仅可读性差,还容易引发结构混乱。
修正方案1:规范块级If结构
把所有嵌套的If都改成块级形式,每个If都单独换行,明确用End If闭合:
If erange.Offset(0, 1).Value = "RTN" Then If erange.Value = "RASP" Then erange.Offset(0, 11).Value = "a" End If If erange.Value = "FEATHER EDGE" Then erange.Offset(0, 11).Value = "b" End If If erange.Value = "BIG TAPER" Then erange.Offset(0, 11).Value = "c" End If If erange.Value = "SQ & 3SQ" Then erange.Offset(0, 11).Value = "d" End If If erange.Value = "SMALL FLAT" Or erange.Value = "BIG FLAT" Or erange.Value = "BIG MILL" Or _ erange.Value = "SMALL MILL" Then erange.Offset(0, 11).Value = "e" End If If erange.Value = "HALF ROUND" Then erange.Offset(0, 11).Value = "f" End If If erange.Value = "CHAINSAW" Then erange.Offset(0, 11).Value = "g" End If End If
修正方案2:用Select Case优化代码(更推荐)
既然是对同一个变量erange.Value做多个判断,用Select Case会让代码更清晰、易维护:
If erange.Offset(0, 1).Value = "RTN" Then Select Case erange.Value Case "RASP" erange.Offset(0, 11).Value = "a" Case "FEATHER EDGE" erange.Offset(0, 11).Value = "b" Case "BIG TAPER" erange.Offset(0, 11).Value = "c" Case "SQ & 3SQ" erange.Offset(0, 11).Value = "d" Case "SMALL FLAT", "BIG FLAT", "BIG MILL", "SMALL MILL" erange.Offset(0, 11).Value = "e" Case "HALF ROUND" erange.Offset(0, 11).Value = "f" Case "CHAINSAW" erange.Offset(0, 11).Value = "g" End Select End If
这种写法不仅避免了嵌套If的结构混乱,后续要新增判断条件也会方便很多。
内容的提问来源于stack exchange,提问作者Himanshu Gupta
相关产品推荐
相关产品推荐

