
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 【VBAで、On Error が効かない】 3 2022/06/09 10:08
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Excel VBAで「プログラム実行」...
-
Access VBAで行ラベルが定義さ...
-
ACCESS マクロをモジュールに変...
-
Accessでグローバル変数を宣言...
-
OutlookVBAで作成したマクロに...
-
【Excel VBA】 WorksheetやRa...
-
エクセルVBAでUserFormを起動し...
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
callで順に実行されるプロシー...
-
PL/SQLのエラーについて
-
DB2でのストアドプロシージャの...
-
エクセルのファイルを自動でFTP...
-
アクセスvba [イベント プロシ...
-
VBA 「文字が入っていたら、...
-
vbaでブックを開いたときにコン...
-
SQL ServerのストアドでUPDATE...
-
VBA プロシージャの名前の取得
-
日付型カラムへのデータINSERT
-
今日の日付が入った行のデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのマクロでモジュールを...
-
Access VBAで行ラベルが定義さ...
-
エクセルVBAでUserFormを起動し...
-
callで順に実行されるプロシー...
-
Excel VBAで「プログラム実行」...
-
【Excel VBA】 WorksheetやRa...
-
OutlookVBAで作成したマクロに...
-
Accessでグローバル変数を宣言...
-
或るプロシージャの呼び出し元判定
-
VBA プロシージャの名前の取得
-
DBMS_OUTPUT.PUT_LINEを実行し...
-
excel/vba/public変数
-
ACCESS2007インポート時の空白...
-
PL/SQLのエラーについて
-
ACCESS マクロをモジュールに変...
-
エクセルVBAが対応できるプログ...
-
DB2でのストアドプロシージャの...
-
エクセルVBAの次のコードの...
-
Excel:ThisWorkbookオブジェク...
-
アクセスのVBについて
おすすめ情報