2017-03-16 105 views
2

我有一个项目,不断增长,不断增长和增长。我在最后一点,它不循环。我不明白为什么。我有他们自己的宏中的元素,他们完美,直到我试图将它们组合成一个超级宏,运行它们。这个想法是,“主”工作簿(XLSM)将运行自己的更新,然后打开同一文件夹中的所有其他XLSM文件,并运行THEIR更新,将数据推送到其他XLSX文件。现在每个XLSM文件运行,通过 子EndofDay() 呼叫一步完美的作品宏1 呼叫步骤2 结束小组 我用同样的“做,而”结构打开的其他书籍和SuperMacro称自己“一天的结束”。它会通过一些XLSM文件,然后在MyFiles = Dir上出现错误而停止。以下语法应该运行主更新和一个其他代码字符串,然后打开文件夹中的所有其他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

你的代码有几个逻辑错误。

1-这里你告诉代码停止当到达主文件,但你真正想要的是跳过主文件。还你一个比较简单的文件名到FULLPATH名

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 
+0

移动循环在“MyFiles”下创建一个编译错误并且不运行任何东西。 –

+0

其他地方一定有错误。再次检查文件名和路径。 –

+0

你测试过我的代码吗?您是否用您的实际家庭文件夹替换了“我”? –