将Excel工作簿的一部分复制/粘贴到当前未打开的工作簿

问题描述 投票:3回答:1

我需要将Excel工作簿的一部分复制到~3500其他工作簿。由于工作簿的数量,在每个工作簿上运行宏是不可行的。

有没有办法复制该片段并将其粘贴到其他工作簿而不打开它们?

excel vba
1个回答
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)

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

© www.soinside.com 2019 - 2024. All rights reserved.