将Excel工作簿的一部分复制/粘贴到其他工作簿而不打开

我需要将Excel工作簿的一部分复制到〜3500其他工作簿。 由于工作簿的数量,编写一个macros并在每个macros上运行都不是很可能。

有没有办法编写一个macros(或任何其他代码真的),可以复制这一块,并将其粘贴到其他工作簿,而不打开它们?

番茄,不幸的是,正如@Ken White和@ L42所指出的那样,为了编辑文件,至less在某种程度上,必须打开它(即将其加载到内存中)。 更糟糕的是,除非你愿意直接操作xml或二进制数据(不build议),否则你将不得不使用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秒。 所以,在你的情况下,你有大约31分钟的时间,有3500个工作簿。 不完全是轻的速度,但肯定比手工更好。 希望这对你有用。 请询问你是否还有其他问题。

补充

番茄响应您的意见,转移格式,包括您的范围内的细胞合并或非合并的性质,你会使用:

 TargetWb.Worksheets("Sheet1").Range(Rng).Value(11) = SourceRange.Value(11) 

我已更新原始代码以反映更改。 这应该照顾你,但让我知道。