嵌套宏不循环

Posted

技术标签:

【中文标题】嵌套宏不循环【英文标题】:Nested macros not looping 【发布时间】:2017-03-16 17:04:42 【问题描述】:

我有一个项目不断发展壮大。我在最后一点,它没有循环。我不明白为什么。我在它们自己的宏中拥有这些元素,并且它们完美无缺,直到我尝试将它们组合成一个运行它们的超级宏。这个想法是“主”工作簿 (XLSM) 将运行自己的更新,然后打开同一文件夹中的所有其他 XLSM 文件并运行他们的更新,将数据推送到其他 XLSX 文件。现在每个 XLSM 文件都运行一个可以完美运行的宏 子 EndofDay () 调用步骤 1 调用第 2 步 结束子 我对 SuperMacro 使用了相同的“Do while”结构,它打开了其他书籍并称它们为“EndofDay”。它通过了几个 XLSM 文件,然后在 MyFiles = Dir 上出现错误而停止。以下语法应该运行主更新和一个其他代码字符串,然后打开文件夹中的所有其他 XLSM 文件。为什么在this下的level下它突然在这个level下不行了。

Sub SuperMacroEOD_Trans()

    Dim MyFiles As String
        Call EndofDayTransfer 'Do this Workbook Transfer first then:
'Step 2: Specify a target folder/directory.
    MyFiles = Dir("C:\Users\ME\Desktop\QA VBA Project\*.xlsm")

'Dont try to open this workbook and do anything.
    Do While MyFiles <> "" And MyFiles <> "C:\Users\ME\Desktop\QA VBA Project\Update_Master.xlsm"
'Step 3: Open Workbooks one by one
    Workbooks.Open "C:\Users\ME\Desktop\QA VBA Project\" & MyFiles

    Call EndofDayTransfer 'Call same macro you ran and run in the other workbooks (they contain it).

    ActiveWorkbook.Close SaveChanges:=True

'Step 4: Next File in the folder/Directory
      Loop
    MyFiles = Dir <------------Gets stuck here or editor turns it yellow.


End Sub

【问题讨论】:

【参考方案1】:

您的代码中有一些逻辑错误。

1- 在这里,您告诉代码在到达主文件时停止,但您真正想要的是跳过 主文件。你也在比较一个简单的文件名和一个完整的路径名

Do While MyFiles &lt;&gt; "" And MyFiles &lt;&gt; "C:\Users\ME\Desktop\QA VBA Project\Update_Master.xlsm"

2- 这应该放在循环内,即之前Loop

MyFiles = Dir &lt;------------Gets stuck here or editor turns it yellow.

3- 您正在使用ActiveWorkbook,这非常危险。你应该使用 explicit 引用。此外,由于所有工作簿都有“EndofDayTransfer”过程,包括主 WB,因此必须明确指定“范围”以便运行适当的过程(参见下面代码中的Application.Run

Sub SuperMacroEOD_Trans()
    Dim MyFiles As String, wb As Workbook
    Call EndofDayTransfer ' Master Workbook Transfer first

    MyFiles = Dir("C:\Users\ME\Desktop\QA VBA Project\*.xlsm")
    Do While MyFiles <> ""
        If MyFiles <> ThisWorkbook.Name Then ' skip the master
            ' Always get an explicit reference to any file you open and use it 
            Set wb = Workbooks.Open("C:\Users\ME\Desktop\QA VBA Project\" & MyFiles)
            Application.Run "'" & wb.name & "'!EndofDayTransfer" ' <-- specify scope explicitly to disambiguate
            wb.Close SaveChanges:=True
        End If

        MyFiles = Dir ' <-- inside the loop
    Loop
End Sub

【讨论】:

“MyFiles”下的移动循环会产生编译错误并且不会运行任何东西。 其他地方一定有错误。请再次检查文件名和路径。 您是否按原样测试了我的代码?您是否将“ME”替换为您的实际主文件夹? 上面的编辑版本运行良好。测试了几次。呸!这个测试是让你 XLSM 更新到 5 XLSX。现在让它成为现实...... 7 XLSM 更新到 12 个 XLSX 文件......明天。 完整测试正在共享驱动器上运行。 7 个 xlsm 工作簿查找并打开 12 个 XLSX 工作簿,并根据选项卡名称向它们推送数据。

以上是关于嵌套宏不循环的主要内容,如果未能解决你的问题,请参考以下文章

请教下VB嵌套循环?

两个嵌套for循环的执行顺序

00015_循环嵌套

循环嵌套

batfor循环嵌套改名

无限循环与嵌套循环