【发布时间】:2020-04-15 00:05:58
【问题描述】:
几年来,我在互联网某处有一个宏,它可以打开选定文件夹中的所有文件并对其进行处理(更改所有文件,将它们合并为一个,更改列顺序等)。
由于某种原因,对于某些文件,宏会崩溃而没有任何错误消息。有一天它崩溃了,另一天它没有。它在我的电脑和其他电脑上崩溃,或者它不会在我的电脑上崩溃,它在我的电脑上崩溃等等......
如果文件夹中有 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
您知道这有什么问题吗? 谢谢
【问题讨论】:
-
你应该注释掉,在行前添加
',application.screenupdating,application.displayalerts。这将使 excel 显示所有消息,并可以帮助您识别手头的问题。 -
试试这个 -
Dim Filename As String, Pathname As String -
用
wb.Close替换ActiveWindow.Close -
Excel 文件可能会随着时间的推移而损坏。您应该使用 MZTools
Clean Project功能。它将重建项目,删除多年来积累的任何代码残留。 -
@Luuklag:即使我禁用这两个也没有错误消息。