首页 > 解决方案 > 用于打开文件的 Excel VBA 宏崩溃而没有任何错误消息

问题描述

几年来,我在互联网的某个地方有一个宏,它打开选定文件夹中的所有文件并对其进行处理(更改所有文件中的某些内容,将它们合并为一个,更改列顺序等)。

出于某种原因,对于某些文件,宏会崩溃而没有任何错误消息。有一天它崩溃了,另一天它没有。它在我的计算机上崩溃,以及在计算机上崩溃,或者它不会在我的计算机上崩溃并且它在计算机上崩溃等等......

如果文件夹中有 50 个文件或只有两个小文件,它会崩溃。

我可以让宏运行到最后的唯一方法是在Set wb = Workbooks.Open(Pathname & Filename)上创建一个断点,有时甚至在Do Work wb上创建一个断点。然后,当宏在这个断点处停止时,我只按 F5,它会做它应该做的一切,直到它再次到达断点。

Public LastLine As Long
Public final_file As String
Public my_directory As String

Sub ProcessFiles()
Dim Filename, Pathname As String
Dim wb As Workbook


Application.AskToUpdateLinks = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
 Application.EnableEvents = False

final_file = ActiveWorkbook.Name


my_directory = InputBox("What's the name of the folder with the files?:", "What's the name of the folder with the files", "New files")
Pathname = ActiveWorkbook.Path & "\" & my_directory & "\"
Filename = Dir(Pathname & "*.xlsx")

Do While Filename <> ""
    Set wb = Workbooks.Open(Pathname & Filename)
    DoWork wb
    ActiveWindow.Close
    Filename = Dir()
Loop

    LastLine = 0
Application.ScreenUpdating = True
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.TransitionNavigKeys = False
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub



Sub DoWork(wb As Workbook)
   With wb
       'Here it does the tricks with each opened file

End Sub

你知道这有什么问题吗?谢谢

标签: excelvbacrash

解决方案


我也遇到过类似的情况,当依次打开多个工作簿执行技巧时,Excel 无缘无故地崩溃而没有任何错误消息。

尝试一次又一次地添加Application.Wait 到您的代码中- 至少 3 秒钟。从那以后就没有问题了。Workbook.OpenWorkbook.Close

newHour = Hour(Now()) 
newMinute = Minute(Now())
newSecond = Second(Now()) + 3
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime

我从https://docs.microsoft.com/en-us/office/vba/api/excel.application.wait得到这个


推荐阅读