【发布时间】:2016-09-21 06:46:41
【问题描述】:
我正在尝试使用 VBA 打开一个目录(在本例中为 c:\temp)中的所有 excel 文件,并将所有文件数据表放在一个大文件中。每个新工作表都以文件名加上原始文档上工作表的名称命名。我的代码复制了第一个文件的第一个工作表,甚至正确命名它,但是当我尝试设置名称时,第二个工作表上出现运行时错误 1004:应用程序定义或对象定义错误。任何人都对如何修复有任何建议。
Sub MergeAllWorkbooks()
Dim FolderPath As String
Dim FileName As String
' Create a new workbook
Set FileWorkbook = Workbooks.Add(xlWBATWorksheet)
' folder path to the files you want to use.
FolderPath = "C:\Temp\"
' Call Dir the first time, pointing it to all Excel files in the folder path.
FileName = Dir(FolderPath & "*.xl*")
' Loop until Dir returns an empty string.
Do While FileName <> ""
' Open a workbook in the folder
Set WorkBk = Workbooks.Open(FolderPath & FileName)
Dim currentSheet As Worksheet
Dim sheetIndex As Integer
sheetIndex = 1
Windows(WorkBk.Name).Activate
For Each currentSheet In WorkBk.Worksheets
currentSheet.Select
currentSheet.Copy Before:=Workbooks(FileWorkbook.Name).Sheets(sheetIndex)
FileWorkbook.Sheets(sheetIndex).Name = FileName & "-" & currentSheet.Name
sheetIndex = sheetIndex + 1
Next currentSheet
' Close the source workbook without saving changes.
WorkBk.Close savechanges:=False
' Use Dir to get the next file name.
FileName = Dir()
Loop
结束子
【问题讨论】:
-
您能否调试错误并检查填充工作表名称的值,即确保它没有任何这些 \ / * [ ] : ?字符或不超过 31 个字符。否则,将手表添加到该行的每个部分,以查看哪个出错了。希望这会有所帮助。
-
肯定需要先创建工作表才能命名,工作簿不包含无限工作表。
-
@NickA 我会考虑复制工作表来创建它。也许与
sheetIndex有关?在这里逐步检查并检查我认为的值是了解发生了什么的最佳策略。 -
我曾经在工作表名称长度和字符方面遇到过类似问题,我的解决方案是最初删除特殊字符,然后将名称减少到最大 31,然后循环测试名称和如果存在更改新工作表名称(在我的情况下我缩短了它)。