【问题标题】:How to use multiple for each loops simultaneously?如何同时为每个循环使用多个?
【发布时间】: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 单元格)?如果您继续粘贴到 B5J5 单元格中,那么您只保留最后一个值,这是有意的吗?
  • @RaymondWu 目的是每当我按下按钮时:Resultaten 工作表 N2 将值粘贴到 Invuldocument 工作表 B5,然后 Resultaten 工作表 W2 将值粘贴到 Invuldocument 工作表 J5,然后在保存之前等待一秒钟pdf 并转到循环中的下一个值。所以 N2 到 B5 & W2 到 J5,暂停,另存为 pdf,N3 到 B5 & W3 到 J5,暂停,另存为 pdf..

标签: excel vba foreach


【解决方案1】:

这个想法是循环遍历行号,然后检查 N 和 W 列中的值是否存在,如果存在则将值复制到 2 个单元格 Invuldocument 工作表。

Sub CommandButton2_Click()
    Const Path As String = "C:\Users\802435\Desktop\test12\" 'Assuming that the path don't change, you can declare it as a constant variable
    
    Dim resultWS As Worksheet
    Set resultWS = ActiveWorkbook.Worksheets("Resultaten")
    
    Dim invulWS As Worksheet
    Set invulWS = ActiveWorkbook.Worksheets("Invuldocument")
    
    Dim i As Long
    For i = 2 To 1000
        If resultWS.Cells(i, "N").Value <> "" And resultWS.Cells(i, "W").Value <> "" Then
            invulWS.Cells(5, "B").Value = resultWS.Cells(i, "N").Value
            invulWS.Cells(5, "J").Value = resultWS.Cells(i, "W").Value
                        
            Dim FileName As String '//Code below is to save as PDF in every loop
            Application.DisplayAlerts = False
            FileName = "PRO-" & Range("B5").Value & "-" & Range("D41").Value & ".pdf"
            ActiveWorkbook.SaveAs Path & FileName, xlOpenXMLWorkbook
            Application.DisplayAlerts = True
        Else
            Exit For
        End If
    Next i

End Sub

注意:我没有测试“另存为 PDF”的代码是否有效,因为它超出了这个问题的范围。绝对鼓励您在分配 FileName 的代码中完全限定您的范围引用,因为它当前指的是 ActiveSheet,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2011-07-19
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2021-06-26
    相关资源
    最近更新 更多