VBA编译报错"Next without For"问题排查求助
解决VBA编译错误:"Next without For"
嘿,我一眼就看出问题出在哪了——你的第三个For Each循环里的If语句漏掉了End If!这直接打乱了VBA编译器对代码块结构的识别,才会抛出"Next without For"的错误。
我们来对比下三个循环的差异:
- 第一个遍历
OverlapCol的循环:If判断后有完整的End If,代码块闭合,编译器能正确匹配Next oCol和对应的For语句。 - 第二个遍历
DistAutCol的循环:同样有End If收尾,结构逻辑清晰。 - 第三个遍历
DistGenCol的循环:If块写完GoTo TrueCk后直接接了Next gCol,完全没加End If!这会让编译器误以为Next gCol是If块的一部分(逻辑上完全不对),进而导致最外层的Next ck找不到它对应的For Each ck语句。
另外还有个小细节:你在If块里先写Exit For再写GoTo TrueCk,其实GoTo会直接跳出所有嵌套循环,Exit For在这里是多余的,可以删掉,不过这不是编译错误的核心原因。
修正后的完整代码如下:
For Each ck In Screen.ActiveForm For Each oCol In OverlapCol If oCol = Right(ck.Name, Len(ck.Name) - 2) Then ck.Enabled = True GoTo TrueCk ' 直接跳转,Exit For可省略 End If Next oCol For Each aCol In DistAutCol If aCol = Right(ck.Name, Len(ck.Name) - 2) Then ck.Enabled = True GoTo TrueCk End If Next aCol For Each gCol In DistGenCol If gCol = Right(ck.Name, Len(ck.Name) - 2) Then ck.Enabled = True GoTo TrueCk End If ' 补上这个关键的End If! Next gCol ck.Enabled = False TrueCk: Next ck
总结来说,这个编译错误完全是语法结构不完整导致的——VBA对代码块的嵌套规则要求非常严格,任何If都必须有对应的End If收尾,否则编译器会彻底混乱,连最基础的For/Next匹配都无法完成。
内容的提问来源于stack exchange,提问作者Isaac Reefman
相关产品推荐
相关产品推荐

