在我的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