Events 如何知道VBA运行时环境是已停止还是正在运行?
在我的VBA代码中,我得到一个运行时异常(比如除以零),在错误框中按“结束”后,VBA运行时停止 在此停止期间,我的全局对象将被清除。我希望这些对象保留其值。因为,当我重新开始时,因为这些对象是Events 如何知道VBA运行时环境是已停止还是正在运行?,events,vba,runtime,Events,Vba,Runtime,在我的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#组件。当然,您可以通过与无进行比较来测试全局对象的初始化?(使用“是”或“不是”运算符)。