1

VBA に次のサンプル コードがあります。システム関連のエラーが発生するたびに、独自のエラー メッセージを表示したいと考えています。しかし、次のコードは機能しません。

VBAは言う

型の不一致

私が欲しい

こんにちは、日付が無効です

マイコード

Sub good()

Dim date_ As Date
date_ = "hello"

On Error GoTo Err1:

Err1:
    MsgBox "Hello your date is invalid"
    ' more code

End Sub
4

2 に答える 2

2

On Errorエラーの前にステートメントを配置する必要があります!

また、最後にあることを忘れないでください。そうしないExit Subと、ルーチンは常にエラーコードを実行します。

Sub good()
    Dim date_ As Date

    On Error GoTo Err1:
    date_ = "hello"

    On Error Goto 0 'goes back to default, i.e. show debugger
    Exit Sub

Err1:
    MsgBox "Hello your date is invalid"
    ' more code

End Sub

または、これを行うことができます

Sub good()
    Dim date_ As Date

    On Error Resume Next
    date_ = "hello"
    If Err.Number <> 0 Then
        MsgBox "Wrong type"
        Err.Clear
        Exit Sub
    End If

    On Error Goto 0

    ' more code

End Sub

このアプローチを繰り返して、個々のエラーをキャッチできます...

于 2013-02-22T15:01:27.050 に答える
2

エラーが発生する前、通常は手順の最初にOn Errorステートメントを配置する必要があります。このステートメントは、手順の後半で発生したエラーの処理方法をVBAに指示するディレクティブと考えてください。On Error

Sub good()

On Error GoTo Err1

Dim date_ As Date
date_ = "hello"

Exit Sub 'Make sure you include this so successful executions 
         'don't continue into the error block.

Err1:
    Select Case Err.Number
      Case 101 'Not the actual error number!
         MsgBox "Hello your date is invalid"
      Case 102 'Not the actual error number!
         MsgBox "Something else bad happened!"
      Case Else
         MsgBox "I don't know what happened - unexpected error!"
    End Select
    ' more code

End Sub
于 2013-02-22T14:59:30.357 に答える