みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

ひとつのプロシージャー内で、
二つのエラートラップを仕掛ける事は出来ないのでしょうか?

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のエラー: 型が一致しません。」
へ移動してしまいます。

投稿日時 - 2012-09-19 21:22:15

QNo.7706741

困ってます

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

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 のヘルプを熟読してください。

投稿日時 - 2012-09-20 00:11:20

お礼

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

投稿日時 - 2012-10-19 23:59:16

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問