2015-01-26 234 views
2

我有大約70個不同的Excel文件需要合併到一個主工作簿中。我希望每個excel文件在主工作簿中都有自己的工作表。主工作簿中生成的工作表名稱無關緊要。將多個Excel工作簿合併到一個具有多個工作表的工作簿中

我從另一個網站上檢索到這個代碼,但不能使它適合我的需要。該代碼規定所有要組合的文件都位於同一個目錄中。我讓他們在這裏位於「C:\用戶\ josiahh \桌面\ CF」

下面是代碼,因爲它現在是

Sub GetSheets() 
Path = "C:\Users\dt\Desktop\dt kte\" 
Filename = Dir(Path & "*.xls") 
Do While Filename <> "" 
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True 
For Each Sheet In ActiveWorkbook.Sheets 
Sheet.Copy After:=ThisWorkbook.Sheets(1) 
Next Sheet 
Workbooks(Filename).Close 
Filename = Dir() 
Loop 
End Sub 
+0

*不能使它工作* < - ** **什麼是不工作? – 2015-01-26 23:05:18

+0

它不會導入任何內容。我將運行宏並且什麼都不會發生。 – 2015-01-26 23:06:13

+0

你有沒有采取*任何*步驟來自行調試? – 2015-01-26 23:08:22

回答

2

這是測試,按預期工作。你將會明智地使用Option Explicit並在將來適當地聲明你的變量,雖然這不會導致你的代碼有任何問題。

如上評論指出,可能出現的故障是,你傳遞給Dir函數的參數是不必要的限制:

=Dir(path & "*.xls")將只尋找恰好是「.xls」結尾的文件,也不會考慮更新的文件格式。要解決的是,下面做=Dir(path & "*.xls*")

代碼:

Option Explicit 
Const path As String = "C:\Users\dt\Desktop\dt kte\" 
Sub GetSheets() 
Dim FileName As String 
Dim wb As Workbook 
Dim sheet As Worksheet 

FileName = Dir(path & "*.xls*") 
Do While FileName <> "" 
    Set wb = Workbooks.Open(FileName:=path & FileName, ReadOnly:=True) 
    For Each sheet In wb.Sheets 
     sheet.Copy After:=ThisWorkbook.Sheets(1) 
    Next sheet 
    wb.Close 
    FileName = Dir() 
Loop 
End Sub 
+0

謝謝你的回答,但它仍然沒有工作。它看起來不像你改變代碼以外的任何其他顯式選項? – 2015-01-26 23:22:04

+0

我確實改變了一些東西,實際上我的代碼和你的代碼是完全不同的,因爲我已經聲明瞭我使用Option Explicit的變量,我添加了一個工作簿變量。請按照我的方式完全複製代碼 – 2015-01-26 23:24:04

+0

感謝您的代碼。我必須在我的文件名後添加一個\以使其起作用。非常感激。 – 2015-01-26 23:39:46

相關問題