在我的VBA代码中,我得到一个运行时异常(比如说除以零),并在错误框中按'End'后,VBA运行时被停止。如何知道VBA运行时环境是否停止或正在运行?
在此站点中,我的全局对象正在清除。我希望这些对象保留它们的值。因为,当我重新开始时,因为这些对象是Nothing
,我有问题。
VBA中是否有任何事件会在我的运行时停止时触发?或者有什么方法可以知道VBA是否仍在运行或停止?
在我的VBA代码中,我得到一个运行时异常(比如说除以零),并在错误框中按'End'后,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
但我不确定是否包括错误处理您的程序将足以保存您的全局变量值。我避免使用全局变量。
你有哪些全局对象?在启动时你需要初始化它们。
我的对象是从C#组件在启动期间。现在,当由于任何运行时错误导致执行中断时,我需要再次密切关注C#组件以重置对象。这就是为什么我在VBA端查找一些钩子以知道执行实际停止的时间,以便在执行过程中停止执行期间自动调用c#组件。 – Rajan
当然,您可以通过与Nothing进行比较来测试全局对象的初始化吗? (使用“is”或“is not”运算符)。 –
如果您的代码未运行,则VBA已停止。 :-) –
:)这是真的。我需要以编程方式了解它...想知道是否有任何事件会在执行停止时被触发..或者是否有任何标志可用来决定vba是否正在运行... – Rajan