我需要将Excel工作簿的一部分复制到~3500个其他工作簿。由于工作簿的数量,在每个工作簿上运行宏是不可行的。
有没有办法复制该部分并将其粘贴到其他工作簿而不打开它们?
答案 0 :(得分:0)
番茄, 不幸的是,正如@Ken White和@ L42都指出的那样,为了编辑文件,你必须至少在某种程度上打开它(即将其加载到内存中)。更糟糕的是,除非您愿意直接操作xml或二进制数据(不建议),否则您将不得不使用Excel为您打开.xlsx文件,这需要时间。
当然,这并不意味着你必须手动完成。例如:
Sub DataToOtherWorkbooks()
Dim StrFile As String
Dim SourceRange As Range
Rng = "A1:A2"
Set SourceRange = Range(Rng)
StrFile = Dir("C:\ExcelWorkBooks\*.xlsx")
Do While Len(StrFile) > 0
Debug.Print StrFile
Application.ScreenUpdating = False
Set TargetWb = Workbooks.Open("C:\ExcelWorkBooks\" & StrFile)
TargetWb.Worksheets("Sheet1").Range(Rng).Value(11) = SourceRange.Value(11)
TargetWb.Save
TargetWb.Close SaveChanges:=False
StrFile = Dir
Loop
End Sub
上面的代码将循环遍历ExcelWorkBooks文件夹中扩展名为.xlsx的所有文件,并使用位于源工作簿指定范围内的数据填充它们。
如前所述,这需要一些时间。当我在100个工作簿(从我的笔记本电脑上)运行它时,每个工作簿平均花费0.54秒。因此,在您的情况下,使用3,500本工作簿,您需要大约31分钟。不完全是光速,但肯定比手工操作更好。希望这对你有用。如果您还有其他问题,请询问。
<强>补充强>
番茄响应您的评论,转移格式,包括您使用的范围内细胞的合并或未合并性质:
TargetWb.Worksheets("Sheet1").Range(Rng).Value(11) = SourceRange.Value(11)
我已更新原始代码以反映更改。这应该照顾你,但请告诉我。