人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: onezero
●カテゴリ:コンピュータ
✍キーワード:dB Excel GOTO ON Oracle
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●30ポイント

http://www.hatena.ne.jp/awindow?

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

◎質問者からの返答

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


2 ● きゃづみぃ
●40ポイント

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 させれば、次の行には いきません。

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

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

◎質問者からの返答

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


3 ● voyage_blog
●80ポイント

http://homepage2.nifty.com/inform/vbdb/

VBでデータベース

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

てな感じにしています。

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ