2016-06-29 68 views
1

我需要將Excel工作簿的一部分複製到〜3500其他工作簿。由於工作簿的數量,編寫一個宏並在每個宏上運行它並不是很可能。將Excel工作簿的一部分複製/粘貼到其他工作簿而不打開

有沒有辦法編寫一個宏(或任何其他代碼真的),可以複製該作品並將其粘貼到其他工作簿而不打開它們?

+0

如果不打開文件,則無法複製/粘貼到文件。常識應該告訴你;如果沒有文件打開,你將如何粘貼**? –

+0

假設您知道要複製哪部分工作簿,並且它完全是同一個地方,可以想象,您可以在不同的程序中打開,複製並保存。當然,您可以編寫一個循環來打開每個工作簿,粘貼所需的代碼,並關閉3500次,或者關閉文件夾中的每個工作簿。 – timthebomb

+0

'是否有辦法編寫一個宏(或者其他任何代碼片段),可以複製該片段並粘貼到其他工作簿而不打開它?「這取決於數據的設置。如果它安排的數據庫像(與字段和行),我認爲這是可能的。總之,是的。 – L42

回答

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) 

我已經更新了原始代碼以反映更改。這應該照顧你,但讓我知道。

+0

這工作!但是,源工作簿的某些單元格已合併或具有不同的對齊方式。這可以複製到其他人嗎?謝謝 –

+0

@Mystic番茄,我補充了我的回答,以迴應你的評論。如果您有任何問題,請詢問。 –

+0

太棒了。它的工作完美,謝謝你的幫助 –

相關問題