嵌套宏不循环
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 <> "" And MyFiles <> "C:\Users\ME\Desktop\QA VBA Project\Update_Master.xlsm"
2- 这应该放在循环内,即之前行Loop
MyFiles = Dir <------------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 工作簿,并根据选项卡名称向它们推送数据。以上是关于嵌套宏不循环的主要内容,如果未能解决你的问题,请参考以下文章