快速连续单击VBA宏按钮(而不是AcitveX按钮)时,Excel“有时”崩溃。
VBA代码大量使用了对象模块,因此我一直认为这是垃圾回收问题。在退出按钮单击宏之前,我明确地将顶级对象设置为空,认为这将强制进行垃圾回收。那没有用。
因为它是断断续续的,所以非常令人沮丧。也许有10到20次。
显示的代码只是按钮单击处理程序。此处理程序调用了大约10,000行代码,我没有显示。 VBA代码从工作表中读取信息,进行一些计算,更新工作表上的Excel图表,并将一些数据写回到工作表中。我通常会关闭事件和屏幕更新。
我只是希望其他人遇到快速宏执行导致Excel崩溃的问题。同样,VBA代码运行良好,这似乎是一个更高级别的excel问题?
Public Sub Clicked_UpdateWall_C()
Dim Wall As New CWall_C
Dim ExecutionSuccess As Boolean
Dim errstr As String
ExecutionSuccess = CheckUnits(ActiveSheet.Name, errstr)
If ExecutionSuccess Then ExecutionSuccess = Wall.UpdateWall(ActiveSheet.Name, errstr)
Call CheckError(ExecutionSuccess, errstr)
' This is an attempt to force excel to do garbage collection
Set Wall = Nothing
End Sub
错误消息是“ Excel已停止工作”,而不是VBA运行时错误。可以单击错误对话框中的“重新启动excel”按钮,然后excel重新启动,通常大多数情况下,它不会丢失工作。
由于它是断断续续的,所以我无法发布确切的Excel崩溃对话框文本。
答案 0 :(得分:0)
快速连续单击VBA宏按钮(而不是AcitveX按钮)时,Excel“有时”崩溃。
在黑暗中拍摄。尝试这个。将您的代码代替'~~> Rest of your code
。现在,无论您连续单击多少次,都不会发生任何事情。
Option Explicit
Dim DoNotRunProc As Boolean
Public Sub Clicked_UpdateWall_C()
If DoNotRunProc = True Then Exit Sub
DoNotRunProc = True
On Error GoTo Whoa
'
'~~> Rest of your code
'
Whoa:
DoNotRunProc = False
End Sub
注意:如果您的代码中有单独的错误处理程序,请相应地调整上述代码。
答案 1 :(得分:0)
我能够通过做两件事来解决该问题:
感谢所有对您给予积极评价和建议的人。