将多个Excel工作簿合并到一个具有多个工作表的工作簿中

3
我有约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

无法使其工作 <-- 什么没有工作? - David Zemens
你有没有采取任何措施自己调试这个问题? - David Zemens
1
这段代码仅寻找*.xls文件--这可能是问题所在(假设您的文件是较新的xlsm/xlsx格式,则不会被此函数捕获)。 - David Zemens
1
'70个不同的Excel文件' 是97-2003格式的工作簿吗?你的文件掩码是寻找 .xls,而不是 .xls?(例如:.xlsx,.xlsm,*.xlsb等)。 - user4039065
我正在尝试将一个2003年的Excel文件导入到2010年的Excel工作簿中。 - Josiah Hulsey
显示剩余2条评论
1个回答

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

谢谢你的回答,但它仍然没有起作用。看起来你在代码中除了显式选项之外没有改变任何东西? - Josiah Hulsey
我确实做了一些更改,我的代码与你的完全不同,因为我声明了我的变量,我使用了Option Explicit,我添加了一个工作簿变量。请按照我所写的方式粘贴代码并尝试运行。 - David Zemens
谢谢你的代码。我不得不在我的文件名后面添加一个 \ 才能让它工作。非常感谢。 - Josiah Hulsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接