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

问题描述 投票:0回答:2

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

excel vba
2个回答
0
投票

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

  1. 包括Dim SourceWB as Workbook。这可以在你声明DestWB的地方完成。
  2. Workbooks.Open Filename:=Path & Filename, ReadOnly:=True改为Set SourceWB = Workbooks.Open(Filename:=Path & Filename, ReadOnly:=True, Editable:=True)
  3. Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)改为SourceWB.Sheets("Sheet1").Copy After:=DestWB.Sheets(DestWB.Sheets.Count)
  4. Workbooks(Filename).Close改为SourceWB.Close

不幸的是,.Copy命令是一个Sub,而不是一个函数 - 如果它提供了刚刚创建的工作表的引用,那么它会更加整洁,因为你可以在DestWB.Sheets(DestWB.Sheets.Count).Name = Filename中使用它

我建议,出于调试目的,暂时保持DisplayAlerts。这可以提供关于故障发生位置的线索。

在你的循环中还包括一些debug.print线。找到它在循环中崩溃的位置可以帮助诊断问题。让它们有点描述性,我想到的是:debug.print "Entered loop" debug.print "Copied file" debug.print“重命名文件” 'debug.print“new FileName is”&FileName`。你明白了。


-1
投票

从下面的链接中尝试AddIn。

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.