2

MzTools のデフォルトのエラー ハンドラ テンプレートは次のとおりです。

On Error GoTo {PROCEDURE_NAME}_Error

    {PROCEDURE_BODY}

   On Error GoTo 0
   Exit {PROCEDURE_TYPE}

{PROCEDURE_NAME}_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure {PROCEDURE_NAME} of {MODULE_TYPE} {MODULE_NAME}"

On Error Goto 0Exit ステートメントの直前に置かれていることに注意してください。これを行うポイントは何ですか?冗長なようです。関数のエラー ハンドラは、関数が終了するとオフになります。

4

2 に答える 2

3

on error goto 0現在のスコープでエラー処理をオフに、デフォルトのケースに戻します。

この場合、プロシージャは、関数の実行中はエラーハンドラをアクティブにする必要がありますが、終了時にオフにする必要があります。あなたが言うように、エラーハンドラのスコープはなので、この場合は必要ありません。その{PROCEDURE_TYPE}ため、終了時に元に戻されます。

ただし、コーダー(特にテンプレートを生成するコーダー)は、終了する前にCプログラムで割り当てられたメモリを解放するなど、技術的に必要でない場合でも、自分でクリーンアップしたい場合があります。

それがここでのケースであると私が思うのですが、それは本当に単なる仮定です。

于 2012-05-01T08:21:30.317 に答える
3

現在のエラーハンドラーをオフにすることではなく、Errオブジェクトをクリアすることです。

これを試して

Option Explicit

Private Sub Command1_Click()
    pvTest
    MsgBox Err.Description
End Sub

Private Sub pvTest()
    On Error Resume Next
    Debug.Print 1 / 0
'    On Error GoTo 0
End Sub

次に、コメント行を削除します。

于 2012-05-01T14:14:31.983 に答える