在我的 VBA 代码中,我得到一个运行时异常(比如除以零),在错误框中按“结束”后,VBA 运行时停止。
在此停止期间,我的全局对象被清除。我希望这些对象保留它们的值。因为,当我重新开始时,由于这些对象是Nothing
,我遇到了问题。
VBA 中是否有任何事件会在我的运行时停止时触发?或者有什么方法可以知道 VBA 是否仍在运行或停止?
在 VBA 中,未处理的异常会清除全局变量。因此,将错误处理程序添加到您的 VBA 过程中。
这是立即窗口中的会话记录,使用下面包含的 2 个过程。
MyGlobal = "foo"
Call DemoDivideByZero
? Chr(39) & MyGlobal & Chr(39)
''
MyGlobal = "foo"
Call DemoDivideByZero2
Error 11 (Division by zero) in procedure DemoDivideByZero2
? Chr(39) & MyGlobal & Chr(39)
'foo'
没有错误处理程序的过程...
Public Sub DemoDivideByZero()
Debug.Print 2 / 0
End Sub
带有错误处理程序的版本...
Public Sub DemoDivideByZero2()
Dim strMsg As String
On Error GoTo ErrorHandler
Debug.Print 2 / 0
ExitHere:
On Error GoTo 0
Exit Sub
ErrorHandler:
strMsg = "Error " & Err.Number & " (" & Err.Description _
& ") in procedure DemoDivideByZero2"
Debug.Print strMsg
GoTo ExitHere
End Sub
但是我不确定在您的过程中包含错误处理程序是否足以保留您的全局变量值。我避免使用全局变量。
你有哪些全局对象?在启动时,您需要初始化它们。