二つのエラーを発生させたい

このQ&Aのポイント
  • ひとつのプロシージャー内で、二つのエラートラップを仕掛ける事は出来ないのでしょうか?
  • i = "b"で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」と表示させるにはどうすればいいでしょう?
  • Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、i = "a"のエラーで、 「Err2のエラー: 型が一致しません。」へ移動してしまいます。
回答を見る
  • ベストアンサー

二つのエラーを発生させたい

ひとつのプロシージャー内で、 二つのエラートラップを仕掛ける事は出来ないのでしょうか? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description On Error GoTo Err2 i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub を行うと、 i = "b" で2回目のエラーが発生した時は、 実行時エラーになってしまいます。 i = "b" で2回目のエラーが発生した時に、 「Err2のエラー: 型が一致しません。」 と表示させるにはどうすればいいでしょう? Sub エラーが発生した時にエラーが発生したら() Dim i As Long On Error GoTo Err1 On Error GoTo Err2 i = "a" Exit Sub Err1: MsgBox "Err1のエラー: " & Err.Description i = "b" Exit Sub Err2: MsgBox "Err2のエラー: " & Err.Description End Sub にすると、 i = "a" のエラーで、 「Err2のエラー: 型が一致しません。」 へ移動してしまいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

on error gotoによって「エラー処理ルーチン」にジャンプしますが、エラー処理ルーチンの中ではエラー処理は出来ません。必ずその場でエラーになります。 エラー処理を継続するには、必ず一回resumeによってエラー処理ルーチンから復帰する必要があります。 作成例: sub macro1()  dim i as long  on error goto err1  i = "a"  on error goto err2  i = "b"  exit sub err1:  msgbox "ERR1"  resume next  err2:  msgbox "ERR2"  resume next end sub より詳しい使い方は、on error あるいは resume のヘルプを熟読してください。

TWOAWZFHUH
質問者

お礼

ありがとうございました。

関連するQ&A

  • エラーが発生した場合は VBA

    Sub Sample() On Error GoTo Err1 Dim i As Integer i = "あ" '←ココで構文エラーとなる。 MsgBox "あ" Debug.Print "無事終了します" Exit Sub Err1: Debug.Print "エラーになりました" i = 1 Resume Next 'エラーの発生した次の行から処理を続行します。 End Sub このようなエラー処理で エラーが発生した場合は MsgBox "あ" ではなく i = "あ" '←ココで構文エラーとなる。 に戻る事は出来ないのでしょうか?

  • On ErrorでエラーNoが0

    On ErrorでエラーをトラップしてエラーNOとエラー内容をダイアログに表示させています。 Private Sub pv_sample() Dim errno as Long On Error GoTo ERR_END ' 処理内容略 Exit Sub ERR_END: errno = Err.Number MsgBox "システムエラー エラーNO(" & errno & ") 内容(" & Err.Description & ")" End Sub エラーが発生した場合はErr.Numberには0以外がセットされるはずですが 「システムエラー エラーNO(0) 内容()」 というメッセージが表示されることがあります。 On Eroorで飛んできたときにエラーNoが0になってしまうことはありえるのでしょうか。

  • GoToRecordで実行時エラー '2105'

    教えてください。Access2000です。 Private Sub 次へ_Click() On Error GoTo Err_次へ_Click On Error Resume Next DoCmd.GoToRecord , , acNext Exit_次へ_Click: Exit Sub Err_次へ_Click: MsgBox ERR.Description Resume Exit_次へ_Click End Sub って書いたのですが、最後のレコードまで行った後 「次へ」をクリックすると実行時エラーになってしまいます。 移動できませんとかメッセージで逃げたいのですがどうすればいいのでしょうか? お願いします。

  • ループの中で何度もエラー処理をしたい場合

    サンプルコードを掲載します。 実際はセルの文字を取得するのでこのコードとは違いますが、形は同じです。 Sub test() Dim i As Long On Error GoTo Err1 For i = 0 To 5 i = "a" Err1: Debug.Print i "は、エラーになりました" Next End Sub このようなコードの場合、 i=0の時に、1回目のエラーになって 「0は、エラーになりました」が返りますが、 その後、i=1になった時に i = "a"を実行すると On Error GoTo Err1が無視され、エラーになってしまいます。 ループの中でエラーが何度発生してもエラー処理をする方法はありますか? On Error Resume Next以外の方法で教えてください。

  • アクセスのVBAについて、フォームの On Error Goto についておしえてください。

    Private Sub cmd次_Click() On Error GoTo Err DoCmd.GoToRecord , , acNext Exit_Click: Exit Sub Err: MsgBox "この先にレコードがなくなると、ここをつうかするのだろうか。" Resume Exit_Click End Sub 一連の流れについて,ご解説ください。よろしくお願いいたします。

  • 「エラーの宣言」「エラーの定義」

    Sub Sample() Dim i As Long On Error GoTo test i = "a" test: i = 1 End Sub こういうのって、 On Error GoTo test の部分は「エラーの宣言」って言いますか? 「エラーの定義」でしょうか?

  • vbaで、postgresqlアクセス問題

    vbaで、postgresqlアクセス問題:      データベースに、データは ***0000, でも、vbaで、取得したのは ****.四つの0が自動に、削除されました。      例: postgresqlに、 40000 ⇒ vbaで、取得した: 4   vbaソース:  Option Explicit Sub subPgGetData() Dim adoCn As New ADODB.Connection On Error GoTo ErrLogin: With adoCn .Provider = "PostgreSQL OLE DB Provider" .Properties("Data Source") = Range("B1").Value .Properties("Location") = Range("B2").Value .Properties("User ID") = Range("B3").Value .Properties("Password") = Range("B4").Value .Open End With On Error GoTo 0 Dim adoRs As New ADODB.Recordset On Error GoTo ErrSql: adoRs.Open Range("B6").Value, adoCn, adOpenForwardOnly, adLockReadOnly On Error GoTo 0 Workbooks.Add Cells.CopyFromRecordset adoRs Cells.Columns.AutoFit adoRs.Close: Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub ErrLogin: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoCn = Nothing Exit Sub ErrSql: MsgBox "" & vbCrLf & Err.Number & vbCrLf & Err.Description Set adoRs = Nothing adoCn.Close: Set adoCn = Nothing Exit Sub End Sub わかる方はご指示ください。 よろしくお願いします。

  • アクセスVBAのエラーについて

    フォームを閉じるためにフォームにボタンを置いて、イベントプロシージャに下記のように書き込みました。すると添付画像のエラーが返ってきてマクロが動きません。 Private Sub コマンド103_Click() On Error GoTo Err_コマンド103_Click DoCmd.Close Exit_コマンド103_Click: Exit Sub Err_コマンド103_Click: MsgBox Err.Description Resume Exit_コマンド103_Click End Sub で、「ファイル-オプション-現在のデータベース」の”フォームの表示”を問題のフォームに切り替えたら問題なく動作します。 つまり”フォームの表示”で選んだフォームでしかコマンドボタンのマクロが動きません。全てのフォームでマクロが動くにはどうしたらよいのでしょうか?

  • Access2013で確認メッセージを消すには

    画像ファイルの管理データベースを作っています。 管理データベースには、ローカルファイルのフルパスのみ記録し ボタンをクリックしたとき、Windowsフォトビューアで プレビューするようにコードを書きました。 しかし、JPGファイルを開くときは問題ないのですが PNGファイルを開くとき、毎回Microsoft Officeの確認メッセージ ~を開いています。ファイルにはウイルスやコンピューターに問題を起こす 可能性のあるものが含まれていることがあります。 このファイルが信頼できる所からのものか確かめてください。 ファイルを開きますか? が表示されます。 メッセージを表示させない為にはどうしたら良いか、ご教授願います。 以下、ファイルを開く為に作ったコード2種です。 実行結果は同じです。 コード1 Private Sub OpenBotan_Click() Dim strInput As String On Error GoTo Error_GetUserAddress strInput = Me.パス Application.FollowHyperlink strInput, , True GetUserAddress = True Exit_GetUserAddress: Exit Sub Error_GetUserAddress: MsgBox Err & ": " & Err.Description GetUserAddress = False Resume Exit_GetUserAddress End Sub コード2 Private Sub イメージ21_Click() On Error GoTo エラー Dim myTextValue As TextBox Set myTextValue = Me.パス If IsNull(myTextValue) Then MsgBox "URLが未入力です。": Exit Sub Me.イメージ21.HyperlinkAddress = "" '--- A Me.イメージ21.HyperlinkAddress = myTextValue Exit Sub エラー: MsgBox Err.Number & " : " & Err.Description Exit Sub End Sub

  • ヘルプファイルはどこにあるのですか?

    VBAについて質問です。 Sub OnErrorTest() On Error GoTo ErrorTrap Dim i As Integer i = "test" ErrorTrap: MsgBox "エラー番号:" & Err.Number & vbCrLf & _ "エラー内容:" & Err.Description & vbCrLf & _ "ヘルプファイル名" & Err.HelpContext & vbCrLf & _ "プロジェクト名:" & Err.Source End Sub 上記のコードを実行すると エラー番号:13 エラー内容:型が一致しません。 ヘルプファイル名1000013 プロジェクト名:VBAProject が返ってきます。 しかしエラーなのにヘルプは表示されません。 なのにヘルプファイル名1000013となるのはどういう事なのでしょうか? この1000013と言う数字は何を表していますか?

専門家に質問してみよう