嵌套的macros不循环

我有一个项目,不断增长,不断增长。 我在最后一点,它不循环。 我不明白为什么。 我有他们自己的macros中的元素,他们完美,直到我试图把他们合并成一个超级macros,运行它们。 这个想法是,“主”工作簿(XLSM)将运行自己的更新,然后打开同一文件夹中的所有其他XLSM文件,并运行其更新将数据推送到其他XLSX文件。 现在,每个XLSM文件运行一个完全由Sub EndofDay()调用的macros。调用步骤1调用步骤2 End Sub我使用SuperMacro的相同“Do while”结构来打开其他书籍,并调用其“EndofDay”。 它通过几个XLSM文件,然后在MyFiles = Dir上出错。 下面的语法应该运行主更新和一个其他代码string,然后打开文件夹中的所有其他XLSM文件。 为什么它在这个层面上工作时突然不能在这个层面上工作。

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-在这里你告诉代码在到达主文件时停止 ,但是你真正想要的是跳过主文件。 还要比较一个简单的文件名和完整path名

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 ,这是非常危险的。 你应该使用明确的引用。 此外,由于所有工作簿都有“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