【发布时间】:2014-10-09 23:23:51
【问题描述】:
我正在尝试运行嵌入在 100 个文件中的每个文件中的宏,而无需手动打开、运行、保存和关闭它们。宏仅在我想运行的“目标”文件中。
我找到了这个SO question,了解如何做到这一点并让它在本地工作。
Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook
Pathname = ThisWorkbook.Path
Wildcard = "Target*.xlsm"
Filename = Dir(Pathname & "\" & Wildcard)
Do While Filename <> ""
Set wb = Workbooks.Open(Pathname & "\" & Filename)
DoWork wb
wb.Close SaveChanges:=True
Filename = Dir()
Loop
End Sub
Sub DoWork(wb As Workbook)
With wb
'Do your work here
.Worksheets(1).Range("A1").Value = "Goodbye World!"
End With
End Sub
我将这个 VBA 脚本放在“Controller.xlsm”中,然后我可以在名称为“Target1.xlsm”、“Target2.xlsm”等目标文件的文件夹上运行DoWork() 宏。但我想用仅在每个目标中的宏替换DoWork()(所有相同的宏,它调用这台机器上的软件)。我尝试将DoWork() 替换为OtherMacro 和Filename!OtherMacro 之类的东西,但都不起作用(其中OtherMacro 是每个“Target*.xlsm”文件中的相同宏)。
这可能吗?我可以在循环使用“Controller.xlsm”中的宏的同时运行“Target*.xlsm”中的宏吗?
似乎还可以选择在“Target*.xlsm”中运行宏,而其他宏则处于打开状态。如果“Target*.xlsm”文件中的宏需要运行 2 小时,这会导致问题吗?也就是说,“Controller.xlsm”中的macr会在工作完成之前尝试保存并关闭“Target*.xlsm”吗?谢谢!
【问题讨论】:
-
从工作表外部调用工作表特定宏:stackoverflow.com/a/2303436/212869 将其与循环一起使用应该可以工作
-
@NickSlash - 谢谢。我应该想到的。我现在出门了,但今天下午我会试试你的解决方案。谢谢!