在我的VBA代码中,我得到一个运行时异常(比如除以零),在错误框中按'结束'后,VBA运行时停止。
在此停止期间,我的全局对象将被清除。我希望这些对象保留它们的值。因为,当我重新开始时,由于这些对象是Nothing
,我遇到了问题。
VBA中是否有任何事件会在我的运行时停止时被触发?或者有什么方法可以知道VBA是否仍在运行或停止?
答案 0 :(得分:1)
在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
但是,我不确定在您的过程中包含错误处理程序是否足以保留您的全局变量值。我避免使用全局变量。
答案 1 :(得分:0)
您有哪些全球对象?在启动时,您需要初始化它们。