【发布时间】:2018-04-30 15:30:11
【问题描述】:
我有一个 VBA 脚本,可以将工作表添加到大约 500 个 excel 文件中。 我在运行 VBA 脚本和添加简单的工作表时没有遇到任何问题,但是当我尝试添加一个包含 VBA 脚本以及图形和按钮的工作表时,它会工作一段时间,然后就冻结了。
这里是代码。我知道它没有错误处理 - 有什么建议可以解决这个问题,或者是什么导致 excel 冻结?
Sub FindOpenFiles()
Const ForReading = 1
Set oFSO = New FileSystemObject
Dim txtStream As TextStream
Dim FSO As Scripting.FileSystemObject, folder As Scripting.folder, file As Scripting.file, wb As Workbook, sh As Worksheet
Dim directory As String
'The path for the equipement list. - add the desired path for all equipement or desired value stream only.
Set txtStream = oFSO.OpenTextFile("O:\SiteServices\Maintenance\Maintenance Support Folder\Maintenance Department Information\HTML for Knowledgebase\Excel for Knowledgebase\Equipement paths-all.txt", ForReading)
Do Until txtStream.AtEndOfStream
strNextLine = txtStream.ReadLine
If strNextLine <> "" Then
Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(strNextLine)
For Each file In folder.Files
If Mid(file.Name, InStrRev(file.Name, ".") + 1) = "xls" Then
Workbooks.Open strNextLine & Application.PathSeparator & file.Name
Set wb = Workbooks("Equipment Further Documentation List.xls")
For Each sh In Workbooks("Master File.xls").Worksheets
sh.Copy After:=wb.Sheets(wb.Sheets.Count)
Next sh
ActiveWorkbook.Close SaveChanges:=True
ActiveWorkbook.CheckCompatibility = False
End If
Next file
End If
Loop
txtStream.Close
End Sub
【问题讨论】:
-
作为第一行添加到您的子:
Application.ScreenUpdating = false并在End Sub之前添加另一行:Application.ScreenUpdating = true -
崩溃发生在哪里? (哪一行等)
-
我没有机会检查它在哪里崩溃...它会将工作表添加到前 4 或 5 个文件中,然后崩溃而没有机会检查它在哪里失败...
-
您正在复制的工作表中是否有任何可能自动触发的内容?如果是,请您也将 VBA 发布到您正在复制的工作表中。
-
没有什么,有两个由按钮触发的宏 - 一个通过电子邮件发送图表,一个用于打印。