私の VBA コードでは、ランタイム例外 (0 による除算など) が発生し、エラー ボックスで [終了] を押すと、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
ただし、プロシージャにエラー ハンドラを含めるだけで、グローバル変数の値を保持するのに十分かどうかはわかりません。グローバルの使用は避けます。
どのグローバル オブジェクトがありますか? 起動時に、それらを初期化する必要があります。