将多个Excel工作簿合并到一个包含多个工作表的工作簿中

时间:2015-01-26 22:56:31

标签: excel vba excel-vba

我需要将大约70个不同的Excel文件合并到一个主工作簿中。我希望每个excel文件在主工作簿中获得自己的工作表。在主工作簿中生成的工作表的名称无关紧要。

我从其他网站上检索了此代码,但无法满足我的需求。此代码规定要组合的所有文件都位于同一目录中。我把它们放在这里“C:\ Users \ josiahh \ Desktop \ 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

1 个答案:

答案 0 :(得分:2)

这是经过测试并按预期工作。最好使用Option Explicit并在将来适当地声明变量,尽管这不会导致代码出现任何问题。

如上面的评论中所示,可能的失败是你传递给Dir函数的论点是不必要的限制:

=Dir(path & "*.xls")只会查找完全以&#34; .xls&#34;结尾的文件,并且不会考虑较新的文件格式。要解决此问题,请执行=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