1

私の VBA コードでは、ランタイム例外 (0 による除算など) が発生し、エラー ボックスで [終了] を押すと、VBA ランタイムが停止します。

この停止中に、グローバル オブジェクトがクリアされます。これらのオブジェクトの値を保持したい。もう一度やり直すと、これらのオブジェクトはNothingであるため、問題が発生しています。

ランタイムが停止したときにトリガーされる VBA のイベントはありますか?? または、VBA がまだ実行中か停止中かを知る方法はありますか?

4

2 に答える 2

1

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

ただし、プロシージャにエラー ハンドラを含めるだけで、グローバル変数の値を保持するのに十分かどうかはわかりません。グローバルの使用は避けます。

于 2012-10-08T18:26:32.267 に答える
0

どのグローバル オブジェクトがありますか? 起動時に、それらを初期化する必要があります。

于 2012-10-08T11:45:52.073 に答える