VBA如何同时运行多个For Each循环?双嵌套循环运行异常如何修复?
问题原因
- 循环逻辑错误:你当前用了两层嵌套
For Each循环,实际执行逻辑为:外层遍历N列的每一个非空值时,都会完整遍历一次W列所有非空值,每次匹配都生成一次文件。如果你的需求是N列第i行值和W列第i行值配对填充,嵌套逻辑完全不符合需求,这也是你看到外层只跑一次的核心原因。 - 导出格式错误:代码中
ActiveWorkbook.SaveAs指定的格式xlOpenXMLWorkbook是xlsx表格格式,不是PDF格式,和你要输出PDF的需求不符。 - 隐式声明风险:变量
c、w没有提前声明,容易出现隐性错误。
修复方案
用索引循环替代嵌套的For Each循环,让N列和W列按行号同步遍历,同时修正PDF导出逻辑,修复后代码如下:
Option Explicit Sub CommandButton2_Click() Dim i As Long Dim maxRow As Long Dim FileName As String Dim Path As String Dim wsRes As Worksheet Dim wsFill As Worksheet ' 提前绑定工作表,避免重复调用Sheets出错 Set wsRes = Sheets("Resultaten") Set wsFill = Sheets("Invuldocument") ' 获取N列最后一个非空行号,默认W列有效行数和N列一致 maxRow = wsRes.Cells(wsRes.Rows.Count, "N").End(xlUp).Row If maxRow < 2 Then Exit Sub ' 没有有效数据直接退出 Path = "C:\Users\802435\Desktop\test12\" Application.DisplayAlerts = False Application.ScreenUpdating = False ' 关闭屏幕刷新提速 For i = 2 To maxRow ' 同步取N列和W列第i行的值填充 wsFill.Range("B5").Value = wsRes.Cells(i, "N").Value wsFill.Range("J5").Value = wsRes.Cells(i, "W").Value ' 按需保留等待逻辑 ' Application.Wait Now + #12:00:01 AM# ' 生成文件名 FileName = "PRO-" & wsFill.Range("B5").Value & "-" & wsFill.Range("D41").Value & ".pdf" ' 导出PDF,这里默认导出Invuldocument工作表,可按需调整 wsFill.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=Path & FileName, _ Quality:=xlQualityStandard Next i Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox "导出完成,共导出" & (maxRow - 1) & "份PDF" End Sub
额外说明
如果你的需求确实需要遍历N列和W列的所有组合(即N有m个值、W有n个值,总生成m*n份文件),只需要把内层循环的Exit For去掉即可,原来的逻辑中内层循环碰到空值就退出,不会影响外层循环的继续执行,只是执行逻辑是全组合匹配。
内容的提问来源于stack exchange,提问作者foxed
相关产品推荐
相关产品推荐

