Excel VBA + ADO + Oracleで帳票出力のマクロを組んでいます。Oracle DBやレコードセットをオープンしようとした所で出る実行時エラーをOn Error GoToでトラップしようとしたのですが、うまくトラップできず、VBA Editorの画面に飛んでしまいます。実行時エラーをうまくトラップして、処理を続けるための方策はどのようなものがあるか教えてください。解決につながった回答については、ポイントを多めに差し上げます。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/02/10 12:58:11
  • 終了:--

回答(3件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/02/10 13:07:48

ポイント30pt

On Error Resume Next を使い エラーが出そうな行の次に Err.Numberを 判定させて エラー処理をさせたら いかがでしょうか?

id:onezero

回答ありがとうございます。基本的にレコードセットの.Openメソッドの実行時エラー(オートメーションエラー、レコードがない等)をトラップするためのものなので、On Error Resume Nextは使えないのです。DB接続できなかったり、レコードが読み込めない場合は、メッセージを出して終了させたいと考えています。

2005/02/10 13:12:05
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/02/10 13:18:20

ポイント40pt

http://d.hatena.ne.jp/taknt/20050210

2005-02-10 - takntの作り話、情報ネタ

どいう構成になっているのか わからないのですが

On Error Resume Nextを使った場合、エラーが発生すると Err.Numberが 0以外になります。

そこで

.Openメソッドの処理行のあと

If Err.Number <> 0 Then

MsgBox IDS_ERR_OPEN, vbCritical

Err.clear

Exit Sub

End If

とかメッセージを出して、Exit させれば、次の行には いきません。

また、エラー情報をもたせて、エラーの場合と正常な場合で 二通り、処理するようなつくりに するしかないでしょう。

これで 足りない場合は、ダイアリーのほうに 続きを 書きます。

id:onezero

どうもありがとうございます。教えていただいたコードで少し試してみます。そもそも、なぜOn Error GoToで.Openが落ちるときにトラップできないかが不思議なので、その辺のことをご存じの方がいらっしゃいましたら教えてください。

2005/02/10 13:28:00
id:voyage_blog No.3

voyage_blog回答回数251ベストアンサー獲得回数12005/02/10 13:22:54

ポイント80pt

URLはダミーです。

やはり On Error Resume ResumeODBC

のようにするのがいいのでは?

ResumeODBC:

’ エラー番号を評価

’ サーバがダウンしたとき

’ エラーを意図的に操作する

’ 1.rsADO.Open で ODBC エラー(Err:-2147467259)

Select Case Err.Number

Case -2147467259

’ [Microsoft][ODBC Microsoft Access Driver] パス ’(不明)’ は正しくありません。

’ パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。

If InStr(1, Err.Description, ”[ODBC Microsoft Access Driver]”) > 0 Then

strErrMsg = ”Access Error: サーバがダウンしている可能性があります。しばらくしてから接続してみてください。”

’ [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。

ElseIf InStr(1, Err.Description, ”[ODBC Driver Manager]”) > 0 Then

strErrMsg = ”ODBC Error: ODBCデータソースに「(データソース名)」が設定されていません”

End If

MsgBox ”エラー:” & Err.Number & vbCrLf & _

strErrMsg & vbCrLf & _

”詳しくは,ヘルプを見るかシステム管理者にお問い合わせください。”, vbCritical, App.ProductName

Case Else

MsgBox ”エラー:” & Err.Number & vbCrLf & _

Err.Description & vbCrLf & _

”詳しくは,ヘルプを見るかシステム管理者にお問い合わせください。”, vbCritical, strProductName

Resume Next

End Select

Set conADO = Nothing

End

てな感じにしています。

id:onezero

詳しいソースありがとうございます。これで試してみようと思います。教えていただいた皆様ありがとうございました

2005/02/10 22:39:56

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません