【发布时间】:2021-12-07 22:31:36
【问题描述】:
下面的代码用于运行一个宏,该宏接受多个变量并循环遍历范围以将它们填充到另一个工作表中,然后另存为 pdf。 每个循环使用 1 可以完美运行,但是当我尝试使用 2 时;它将通过第一个循环运行一次,然后仅循环通过第二个循环。
有解决这个问题的想法吗?
Sub CommandButton2_Click()
For Each c In Sheets("Resultaten").Range("N2:N1000").Cells '//Variable 1 range
If c = "" Then Exit For '//To end the loop when cells are empty
Sheets("Invuldocument").Range("B5").Value = c.Value '//Variable 1 transfer
For Each w In Sheets("Resultaten").Range("W2:W1000").Cells '//Variable 2 range
If w = "" Then Exit For '//To end the loop when cells are empty
Sheets("Invuldocument").Range("J5").Value = w.Value '//Variable 2 transfer
Application.Wait Now + #12:00:01 AM# ' //timer if the pc cannot handle the speed
Dim FileName As String '//Code below is to save as PDF in every loop
Dim Path As String
Application.DisplayAlerts = False
Path = "C:\Users\802435\Desktop\test12\"
FileName = "PRO-" & Range("B5").Value & "-" & Range("D41").Value & ".pdf"
ActiveWorkbook.SaveAs Path & FileName, xlOpenXMLWorkbook
Application.DisplayAlerts = True
Next '//Repeat for every Variable in the list until Exit For
Next '//No idea why i need this
End Sub
【问题讨论】:
-
您的 w 循环写入 J5,但文件名使用 D41。那是你的意图吗?此外,有两个循环,每个循环近 1000 行,您将编写近 100 万个文件。这似乎不对。
-
不是您问题的答案 - 而是一种查找错误的方法:使用正确的缩进,以便您查看哪些代码在哪个循环中运行。
-
@Solver Max 循环写入工作表中的不同位置,但文件名必须固定为 D41,这是预期的。我设计的两个循环可能是 1000,通常它们只需要循环 20-50 的值。问题是我希望一个循环完成然后进入下一个循环,当第二个循环完成时返回第一个循环。
-
我认为你需要解释你试图用 2 个循环做什么的意图,是从
Resultaten工作表循环遍历第 2 - 1000 行并将其值粘贴到Invuldocument工作表(N 列到B5和W 列到J5单元格)?如果您继续粘贴到B5和J5单元格中,那么您只保留最后一个值,这是有意的吗? -
@RaymondWu 目的是每当我按下按钮时:Resultaten 工作表 N2 将值粘贴到 Invuldocument 工作表 B5,然后 Resultaten 工作表 W2 将值粘贴到 Invuldocument 工作表 J5,然后在保存之前等待一秒钟pdf 并转到循环中的下一个值。所以 N2 到 B5 & W2 到 J5,暂停,另存为 pdf,N3 到 B5 & W3 到 J5,暂停,另存为 pdf..