VBA宏为何跳过第二个For循环?求故障原因排查
VBA宏第二个For循环未执行的问题修复
问题根源
第二个循环直接跳过的核心原因是循环条件的结束值计算错误:ExportNumRows是A17到其下方最后一行的总行数(比如A17-A21共5行时,ExportNumRows=5),你写的循环条件是counter = 17 To ExportNumRows +5,也就是17 To 10——起始值大于结束值,VBA会直接跳过该循环。
修正后的循环代码
将第二个循环的结束值改为17 + ExportNumRows -1,这样就能精准覆盖A17到目标区域最后一行:
'Start of loop For counter = 17 To 17 + ExportNumRows - 1 Set rng = Worksheets("Averages").Cells(counter, 1) Set rng2 = Worksheets("Master").Columns("A:A").Find(What:=rng.Value, MatchCase:=True) If Not rng2 Is Nothing Then rownumber = rng2.Row rng.Offset(0, 1) = Worksheets("Master").Cells(rownumber, 2).Value rng.Offset(0, 2) = Worksheets("Master").Cells(rownumber + 1, 3).Value rng.Offset(0, 3) = Worksheets("Master").Cells(rownumber + 2, 3).Value End If 'End of loop Next counter
额外优化建议
- 所有
Range操作都限定工作表:比如原代码中ExportNumRows = Range("A17", Range("A17").End(xlDown)).Rows.Count要改成ExportNumRows = Worksheets("Averages").Range("A17", Worksheets("Averages").Range("A17").End(xlDown)).Rows.Count,避免当前工作表切换导致的引用错误。 - 第一个循环的结束值
ImportNumRows +5逻辑正确(起始6对应A6,结束6+ImportNumRows-1),同样建议给Range加上工作表限定。
内容的提问来源于stack exchange,提问作者Paul Omeara
相关产品推荐
相关产品推荐

