Events 如何知道VBA运行时环境是已停止还是正在运行?

Events 如何知道VBA运行时环境是已停止还是正在运行?,events,vba,runtime,Events,Vba,Runtime,在我的VBA代码中,我得到一个运行时异常(比如除以零),在错误框中按“结束”后,VBA运行时停止 在此停止期间,我的全局对象将被清除。我希望这些对象保留其值。因为,当我重新开始时,因为这些对象是无,所以我有问题 VBA中是否有任何事件会在我的运行时停止时触发??或者有没有办法知道VBA是否仍在运行或停止?您有哪些全局对象?启动时,您需要初始化它们。您有哪些全局对象?在启动时,您需要初始化它们。在VBA中,未处理的异常会清除全局变量。因此,将错误处理程序添加到VBA过程中 这是即时窗口中的会话记录

在我的VBA代码中,我得到一个运行时异常(比如除以零),在错误框中按“结束”后,VBA运行时停止

在此停止期间,我的全局对象将被清除。我希望这些对象保留其值。因为,当我重新开始时,因为这些对象是
,所以我有问题


VBA中是否有任何事件会在我的运行时停止时触发??或者有没有办法知道VBA是否仍在运行或停止?

您有哪些全局对象?启动时,您需要初始化它们。

您有哪些全局对象?在启动时,您需要初始化它们。

在VBA中,未处理的异常会清除全局变量。因此,将错误处理程序添加到VBA过程中

这是即时窗口中的会话记录,使用下面包含的两个过程

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
具有错误处理程序的版本

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

但是,我不确定在过程中包含错误处理程序是否足以保留全局变量值。我避免使用全局变量。

在VBA中,未处理的异常会清除全局变量。因此,将错误处理程序添加到VBA过程中

这是即时窗口中的会话记录,使用下面包含的两个过程

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
具有错误处理程序的版本

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

但是,我不确定在过程中包含错误处理程序是否足以保留全局变量值。我避免使用全局变量。

如果代码未运行,则VBA已停止。:-:)没错。我需要通过编程来了解它。。。想知道执行停止时是否会触发任何事件。。或者是否有任何可用的标志来决定vba是否正在运行…如果代码未运行,则vba已停止。:-:)没错。我需要通过编程来了解它。。。想知道执行停止时是否会触发任何事件。。或者是否有任何可用的标志来决定vba是否正在运行…我的对象是在启动期间从C#组件初始化的。现在,当执行因任何运行时错误而中断时,我需要再次通知C#组件以重置我的对象。这就是为什么我在我的VBA端上寻找一些钩子,以了解执行何时实际停止,以便在执行过程中的停止期间自动调用c#组件。当然,您可以通过与无进行比较来测试全局对象的初始化?(使用“is”或“is not”运算符)。我的对象在启动期间从C#组件初始化。现在,当执行因任何运行时错误而中断时,我需要再次通知C#组件以重置我的对象。这就是为什么我在我的VBA端上寻找一些钩子,以了解执行何时实际停止,以便在执行过程中的停止期间自动调用c#组件。当然,您可以通过与无进行比较来测试全局对象的初始化?(使用“是”或“不是”运算符)。