VBA嵌套循环报'Next without For'错误,求双条件复制代码修复
问题解决:VBA报错"Next without For"及代码修正
错误原因
原代码的If语句未正确闭合,嵌套的If缺少对应的End If,导致循环结构混乱,触发"Next without For"错误。
修正后的完整代码
Dim shCD As Worksheet, shVD As Worksheet Dim VDCell As Range Dim lrwCD As Long, lrwVD As Long Dim foundTrue As Boolean Dim i As Integer, j As Integer Application.ScreenUpdating = False Set shCD = Sheets("Checked Dossiers") Set shVD = Sheets("Verdwenen Dossiers") Set VDCell = FreeCell(shVD.Range("A5")) ' 假设FreeCell是你自定义的找空单元格函数 lrwCD = shCD.Cells(shCD.Rows.Count, "B").End(xlUp).Row lrwVD = shVD.Cells(shVD.Rows.Count, "A").End(xlUp).Row foundTrue = False ' 控制是否复制的开关 For i = 2 To lrwCD ' 先判断条件1:对应单元格返回"1" If shCD.Cells(i, 1).Value = "1" Then foundTrue = True ' 遍历目标表,检查编号是否已存在 For j = 2 To lrwVD If shCD.Cells(i, 2).Value = shVD.Cells(j, 1).Value Then foundTrue = False ' 编号已存在,关闭开关 Exit For ' 找到重复就跳出内层循环,不用继续遍历 End If Next j ' 开关仍为True,说明满足两个条件,执行复制 If foundTrue = True Then shCD.Cells(i, 2).Copy VDCell.PasteSpecial Paste:=xlPasteValues Set VDCell = VDCell.Offset(1, 0) ' 更新目标单元格到下一行 End If foundTrue = False ' 重置开关 End If Next i Application.ScreenUpdating = True
关键修改点
- 为所有嵌套的
If添加了对应的End If,修复了循环结构的语法错误 - 添加
Exit For:找到重复编号后立即跳出内层循环,提升运行效率 - 调整了代码缩进,让结构更清晰,便于后续维护
- 修正了变量名笔误:原代码里的
lrwI改为lrwVD,确保逻辑正确
额外优化建议(可选)
对于查找重复编号,用Range.Find方法比逐行循环更高效,尤其当数据量较大时,可以替换内层循环:
' 替换原内层For j循环的代码 If Not shVD.Range("A2:A" & lrwVD).Find(shCD.Cells(i, 2).Value, LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then foundTrue = False End If
内容的提问来源于stack exchange,提问作者Bert_V
相关产品推荐
相关产品推荐

