質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

581閲覧

VBA エラー処理

yakumo02

総合スコア103

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/09/04 02:58

編集2020/09/04 03:46

追記: 伝え忘れていました
どこでエラーが起こるかは分からない前提です
######やりたい処理
VBAでエラーが発生した場合、何らかの処理をします。
そして発生した場所からまた処理を再開して、最後に何回エラーが発生したか回数を表示するプログラムを作成したい。

######課題

以下のようなコードを書いています
処理1でエラーが発生し、Errorプロシージャに飛びます
Erroプロシージャの処理が終わった場合、処理1の後から再開して、また処理2でエラーが発生し、再度Errorへ移動したいです。
1度Errorプロシージャが終われば、Call Errorから再開するので処理が終わってしまいます。
調べてみるとエラーが発生した行を特定する方法はみつけましたが、その行に飛ぶ方法が分かりません
よろしくお願いします

dim a Sub test a=0 On Error GoTo MyError 処理1 'エラー発生 処理2 'エラー発生 Exit sub MyError: Call Error End Sub Private sub Error エラー時の処理 a=a+1 '呼び出された回数をカウント End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

どこでエラーが起きるかわからないということをなかなか想定できないので、
実例を示された方が、エラー回避の方法を勉強できるのでは?
回数を数えることに意味があるかもよくわかりませんし^^;

ExcelVBA

1Sub test() 2 Dim r As Range 3 Dim v 4 Dim a As Long 5 6 Set r = Range("A1:A20") 7 r.Value = "テスト" 8 9 On Error GoTo ErrHandler 10 11 With WorksheetFunction 12 v = .Match("あ", r, 0) 13 v = .VLookup("i", r, 2, 0) 14 End With 15 Set r = r.SpecialCells(xlCellTypeBlanks) 16 17 MsgBox a & "回" 18 Exit Sub 19 20ErrHandler: 21 a = a + 1 22 Resume Next 23End Sub

投稿2020/09/07 01:08

mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

MyErrorの最後で、Resume next でエラーが起こった次の行に復帰できます。

vba

1Dim a As Integer 2 3Sub test() 4a = 0 5On Error GoTo MyError 6 7'処理1 'エラー発生 8Err.Raise 100 '擬似的にエラーを発生 9 10'処理2 'エラー発生 11Err.Raise 200 12 13Exit Sub 14 15MyError: 16 Call Error 17 Resume Next 18End Sub 19 20Private Sub Error() 21 a = a + 1 '呼び出された回数をカウント 22End Sub

投稿2020/09/04 03:57

編集2020/09/04 14:57
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

いろいろツッコミたいところはありますが、ポイントだけ。

VBA

1On Error Resume Next 2 3’処理1をここに書く 4 5If Err.Number <> 0 Then 6 call MyError 7 Err.Clear 8End If 9 10’処理2をここに書く 11 12If Err.Number <> 0 Then 13 call MyError 14 Err.Clear 15End If 16 17On Error Goto 0

ちなみに今のコードでMyErrorを2回呼んでもaは2にならないと思いますが
そこも見直してください。

投稿2020/09/04 03:12

編集2020/09/04 03:38
kay-ws

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yakumo02

2020/09/04 03:47

回答ありがとうございます。 すみません、 伝え忘れたことを追記しました。
kay-ws

2020/09/04 04:07

IF Error.Number <> 0 Then これは、エラーが発生しなかった場合には Error.Numberが0なのを利用しています。
kay-ws

2020/09/07 00:18

momon-gaさんの回答のほうがスマートですね。 私の回答のほうでも test プロシージャの前にDim a As Integerで目的は達せられると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問