VBA出现Loop Without Do错误,请求协助排查解决
搞定VBA里的"Loop Without Do"错误
嘿,这个错误我之前也踩过坑!虽然你说已经加了End If,但大概率是Do循环和If语句的嵌套结构出了问题,导致编译器找不到对应的Do和Loop配对,跟你说几个排查的关键点:
- 先核对Do和Loop的配对关系:每个
Do(不管是Do While还是Do Until)必须有一个对应的Loop,而且不能被其他未闭合的语句打断。比如如果你的If块没正确收尾,编译器可能会把Loop当成If结构的一部分,自然就找不到对应的Do了。 - 把代码按缩进整理清楚:很多时候是嵌套的If层级乱了,比如在Do循环里套了多层If,某一层漏写或多写了
End If,整个结构就混乱了。你可以把每行代码按层级缩进,一眼就能看出哪个If没闭合。 - 检查循环的逻辑写法:给你举个遍历AO列替换值的正确示例,你可以对照自己的代码看看:
如果你是用If的写法,也要确保每个Sub LateralSizeID() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Set ws = ActiveSheet lastRow = ws.Cells(ws.Rows.Count, "AO").End(xlUp).Row ' 用Do循环遍历的写法 i = 2 ' 假设从第2行开始 Do While i <= lastRow Select Case ws.Cells(i, "AO").Value Case 6 ws.Cells(i, "AO").Value = 2 ' 可以加其他编码规则 Case 5 ws.Cells(i, "AO").Value = 1 ' 更多规则... End Select i = i + 1 ' 必须递增,不然会无限循环 Loop ' 这里和开头的Do严格配对 End SubIf都有对应的End If,而且Do和Loop在同一个层级:Sub LateralSizeID() Dim ws As Worksheet Dim cell As Range Set ws = ActiveSheet ' 用For Each遍历更简洁 For Each cell In ws.Range("AO2:AO" & ws.Cells(ws.Rows.Count, "AO").End(xlUp).Row) If cell.Value = 6 Then cell.Value = 2 ElseIf cell.Value = 7 Then cell.Value = 3 ' 其他条件... End If Next cell End Sub - 排查多余的语句:有时候不小心多写了一个
End If或者Loop,也会让编译器混淆结构,仔细检查一遍代码里的每个闭合语句。
如果还是找不到问题,把完整的代码贴出来,我帮你揪出问题所在!
内容的提问来源于stack exchange,提问作者Rmoore
相关产品推荐
相关产品推荐

