Excel从多本书复印表时重新启动

时间:2018-02-24 17:37:46

标签: excel vba

我构建了一个程序,用于从目录中的所有书籍中复制第一张,然后将它们粘贴到活动工作簿中。我在目录中有大约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次循环后重新启动。

2 个答案:

答案 0 :(得分:0)

不确定这是否可以解决手头的问题,但它有助于调试或暴露问题。 简而言之,确定您的源数据。

  1. 包括Dim SourceWB as Workbook。这可以在您声明DestWB
  2. 的地方完成
  3. Workbooks.Open Filename:=Path & Filename, ReadOnly:=True更改为Set SourceWB = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True, Editable:=True)
  4. Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)更改为SourceWB.Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
  5. Workbooks(Filename).Close更改为SourceWB.Close
  6. 不幸的是,.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)

从下面的链接中尝试添加。

enter image description here

https://www.rondebruin.nl/win/addins/rdbmerge.htm