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

解決済みの質問

エクセルのVBAで、エラーになった場合の回避

excel2000 VBA エラーが発生した場合の処理の方法についてアドバイスをお願いいたします。

データベースのレコードを操作する、4つのプロシージャが下記の通りあります。

(1)最初(saisyo)
(2)最後(saigo)
(3)前(mae)
(4)次(tugi)

いきなり、(3)前、(4)次の処理を実行すると、エラーになってしまうのですが、これをなくしたい。(on error gotoステートメントを使えばいいのかなと考えていますが)

ワークブックオープン時のイベントで(2)最後(saigo)を呼び出しているので、基本的にエラーは出ないのですが、いろいろレコードを触っている時に、(3)、(4)を実行するとエラーになるのがわずらわしいです。

どういう修正をコードに加えればいいか、アドバイスいただけるとありがたいです。

Public trg As Range
Sub Saisyo()
Set trg = Worksheets("data").Range("A1")
Do
Set trg = trg.Offset(1, 0)
Loop Until trg.EntireRow.Hidden = False
Call Tenki

End Sub


Sub Saigo()
Set trg = Worksheets("data").Range("A60000").End(xlUp)
Call Tenki
End Sub

Sub Mae()
If trg.row >= 3 Then
Do
Set trg = trg.Offset(-1, 0)
Loop Until trg.EntireRow.Hidden = False
If trg.row = 1 Then
MsgBox "これより前のレコードはありません"
Call Saisyo
Exit Sub
Else
Call Tenki
End If
Else
MsgBox "これより前のレコードはありません!"
End If
End Sub


Sub Tsugi()
If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then
Do
Set trg = trg.Offset(1, 0)
Loop Until trg.EntireRow.Hidden = False
Call Tenki
Else
MsgBox "これより後ろのレコードはありません"
End If
End Sub

Sub Tenki()
'レコードのtrgの値を入力シート(input)のBC1セルに表示させる
Worksheets("input").Range("BC1").Value = trg
End Sub

投稿日時 - 2011-08-02 21:09:17

QNo.6916987

困ってます

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

とりあえずアテズッポで,たとえば次のようにしてみましょうか。

Sub Mae()
on error goto errhandle
If trg.row >= 3 Then
Do
Set trg = trg.Offset(-1, 0)
Loop Until trg.EntireRow.Hidden = False
If trg.row = 1 Then
MsgBox "これより前のレコードはありません"
Call Saisyo
Exit Sub
Else
Call Tenki
End If
Else
MsgBox "これより前のレコードはありません!"
End If
exit sub
errhandle:
call Saisyo
End Sub


Sub Tsugi()
on error goto errhandle
If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then
Do
Set trg = trg.Offset(1, 0)
Loop Until trg.EntireRow.Hidden = False
Call Tenki
Else
MsgBox "これより後ろのレコードはありません"
End If
exit sub
errhandle:
call saigo
End Sub




「動いたり動かなかったりする」トラブルは,実データ(あるいはワークシートの様子)とマクロが整合していないのが原因ですから,ただマクロだけ眺めていても的確な解決策はみつかりません。

どういう状況で,マクロの具体的にどこの行が,どんなマクロの状況(たとえば変数の内容は? たとえばエラーになったその瞬間に,エラーになったマクロが触ろうとしていたセルなどの具合は?)でエラーになるのか,キチンと分析し理解するように心がけてください。必要に応じて,そういったあなたのエクセルで起きている「事実」を情報提供して,ご相談を投稿してください。

また,エラーの発生する具体的な状況(原因)を突き止めた次のステップとして,じゃぁその「リカバリーとしては具体的に何がどのようにあればよいのか」についてよく検討し,それをまたマクロに実装していきます。

投稿日時 - 2011-08-03 00:14:46

お礼

keithin様

回答ありがとうございます。
抽象的な質問にも関わらず、お答え頂き感謝いたします。
以後、エラー内容の分析と具体的事実を明確に述べる。を気をつけていきます。

投稿日時 - 2011-08-04 08:39:41

ANo.1

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

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

回答(1)

あなたにオススメの質問