我构建了一个程序,用于从目录中的所有书籍中复制第一张,然后将它们粘贴到活动工作簿中。我在目录中有大约1200本书,每次运行它都没有失败,在#125后重新启动。没有错误消息。无论如何绕过这个?
Sub GetSheets()
Path = "C:\Users\bdaly\Desktop\Formulas\smaller sample\"
Dim DestWB As Workbook
Set DestWB = ThisWorkbook
Filename = Dir(Path & "*.xls")
Do While Filename <> ""
Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
Application.DisplayAlerts = False
Workbooks(Filename).Close
Application.DisplayAlerts = True
Filename = Left(Left(Filename, Len(Filename) - 4), 31)
DestWB.Sheets(DestWB.Sheets.Count).Name = Filename
Filename = Dir()
Loop
End Sub
编辑:建议我删除了违规文件,Excel仍然会在124次循环后重新启动。
答案 0 :(得分:0)
不确定这是否可以解决手头的问题,但它有助于调试或暴露问题。 简而言之,确定您的源数据。
Dim SourceWB as Workbook
。这可以在您声明DestWB
。Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
更改为Set SourceWB = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True, Editable:=True)
Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
更改为SourceWB.Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
Workbooks(Filename).Close
更改为SourceWB.Close
不幸的是,.Copy
命令是一个Sub,而不是一个函数 - 如果它提供了刚刚创建的工作表的引用,那么它会更加整洁,因为你可以在{{1}中使用它}
我建议,出于调试目的,暂时保持DestWB.Sheets(DestWB.Sheets.Count).Name = Filename
。这可以提供关于故障发生位置的线索。
还在循环中包含一些DisplayAlerts
行。找到它在循环中崩溃的位置可以帮助诊断问题。让它们有点描述性,我想到的是:
debug.print
debug.print "Entered loop"
debug.print "Copied file"
“重命名文件”debug.print
“新FileName为”&amp; FileName`。
你明白了。
答案 1 :(得分:-1)