
No.3ベストアンサー
- 回答日時:
>Callで呼んだプロシージャにも効くなら、
>Msgbox"test2-2"も表示されるはずですよね?
あ、いや、On Error Resume Nextがかかれたプロシージャだけで有効です。
No1の補足のケースで言いますと、test1()はエラーを無視しますが、
test2()にはOn Error Resume Nextとはかかれていないのでエラーとなり
そこで処理は抜けてしまって制御がtest1()に戻ります。
しかしtest1はエラー無視なのでそのまま処理は進みます。
具体的には・・
Sub test1()
Dim x, y
On Error Resume Next
y = x / 0 →[1]エラーですが無視
MsgBox "test1-1" →[2]表示
Call test2 →[3]CALL
→[6]test2はエラーだったが無視
MsgBox "test1-2" →[7]表示
End Sub
Sub test2()
Dim x, y
MsgBox "test2-1" →[4]表示
y = x / 0 →[5]エラーでTest2は抜ける(終了)
MsgBox "test2-2"
Call test3
End Sub
もし、エラーでも"test2-2"を表示したいのでしたら、
test2にもOn Error Resume Nextをかく必要があります。
No.2
- 回答日時:
>そのプロシージャから呼び出す次のプロシージャ以降まで効いているみたいです。
記述の在るプロシージャ内だけだと思います。
が、その中でCALLしているプロシージャを含みます。
Sub f_functin1()
On Error Resume Next
Call f_function2
End Sub
例えば上のような場合ですと、f_function2でエラーがあったとしても無視されるかと思います。
f_function2はf_functin1プロシージャ内と解釈できるからです。
もし、実行時エラーはだしたくないが、エラー処理はしたいのであれば、私ならこんな感じでかきます。
Sub f_functin1()
On Error GoTo ERR
Call f_function2
EXT:
Exit Sub
ERR:
MsgBox ERR.Description 'エラー処理
Resume EXT
End Sub
この回答への補足
ありがとうございます。
No1の補足にも書いたとおりです。
Callで呼んだプロシージャにも効くなら、Msgbox"test2-2"も表示されるはずですよね?
No.1
- 回答日時:
merlionXXさん
>End Subのまでの間を超えて、そのプロシージャから呼び出す次のプロシージャ以降
単独プロシージャでは、そんなことはないはずです。実際のコードを見なければ、はっきりといえませんが、サブルーチン上では、そのまま引き継ぎますので、つい、うっかり失敗しますね。これが、なかなか分からないです。
もう1つ、うっかりするのは、ループなどしている場所で、On Error Resume Next と On Error Gto 0 で挟まれた場所の変数は、Err の発生する前の値を確保しているので、Err が発生したら、その変数の中を、一旦空にしてあげないといけませんね。(Test_Err3)
'サンプル
Sub test_Err1()
On Error Resume Next
Err.Raise 3
If Err.Number > 0 Then
MsgBox Err.Description
End If
Call test_Err2
On Error Goto 0
End Sub
Sub test_Err2()
If Err.Number > 0 Then
MsgBox Err.Description
End If
End Sub
'----------
Sub Test_Err3()
Dim i As Long, a As Long
For i = 65534 To 65538
On Error Resume Next
a = Cells(i, 1).Row
On Error GoTo 0
MsgBox a
Next i
End Sub
この回答への補足
いつもすみません。
こういうケースです。
Sub test1()
Dim x, y
On Error Resume Next
y = x / 0
MsgBox "test1-1"
Call test2
MsgBox "test1-2"
End Sub
Sub test2()
Dim x, y
MsgBox "test2-1"
y = x / 0
MsgBox "test2-2"
Call test3
End Sub
Sub test3()
Dim x, y
MsgBox "test3-1"
y = x / 0
MsgBox "test3-2"
End Sub
test1からtest2を呼び出し、MsgBox "test2-1"まで表示されますが、次のエラーは表示されず、MsgBox "test1-2"へ戻るようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルVBA 「On Error GoTo 0」について
Excel(エクセル)
-
VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー
Excel(エクセル)
-
Excelで「同じ名前のファイルが既に開いています」
Excel(エクセル)
-
4
Range(A1")⇔cells(1,1)の変換。"
Excel(エクセル)
-
5
VBAで文字列を数値に変換したい
Excel(エクセル)
-
6
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
7
「RunSQL」と「Execute」の違い
Access(アクセス)
-
8
エクセルでセルにポインタすると表示されるコメントみたいなもの
Excel(エクセル)
関連するQ&A
- 1 Excel VBA エラー回避について エクセルファイル検索時にエラーを回避する方法を教えてください
- 2 エクセルVBA 「On Error GoTo 0」について
- 3 エクセルのVBAで、エラーになった場合の回避
- 4 EXCEL2000 VBAにてセルの入力制限とon errorについて
- 5 エクセルvbaで転記したのですが、数字のゼロが消えてしまいます。 ゼロも転記するためにはどうしたらい
- 6 エクセルVBA For~Nextについての質問
- 7 excel VBA のエラー回避のアドバイス依頼
- 8 エクセルVBAで納期管理するために
- 9 Excel VBA WEBからデータ取得時のエラー回避について
- 10 VBAのFINDのエラーを回避したいです。
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
エクセルVBAでUserFormを起動し...
-
5
Excel VBAで「プログラム実行」...
-
6
或るプロシージャの呼び出し元判定
-
7
excel/vba/public変数
-
8
Accessでグローバル変数を宣言...
-
9
VBA 「文字が入っていたら、...
-
10
VBA ユーザーフォームの値の取...
-
11
DBMS_OUTPUT.PUT_LINEを実行し...
-
12
Excel:ThisWorkbookオブジェク...
-
13
エクセルのファイルを自動でFTP...
-
14
Access2016 VBA ボタンのイベン...
-
15
EXCEL 2003におけるVBA,マクロ...
-
16
ACCESS マクロをモジュールに変...
-
17
エントリ ポイントが見つかりま...
-
18
ACCESS2007インポート時の空白...
-
19
【Excel VBA】 WorksheetやRa...
-
20
自作アドインのFunctionプロシ...
おすすめ情報