• ベストアンサー
  • すぐに回答を!

VB6.0で、ランタイムエラーを全て出力するには?

VB6.0で作成したプログラムの実行中にランタイムエラー(以後、「エラー」と記載)が発生した場合、 発生したエラーを全てログに出力し、後続処理を継続する方法を教えてください。 以下に詳細を示します。 '=============================== ' サンプル '=============================== Sub Main()   On Error Resume Next   処理A   処理B   処理C   処理D   If Err.Number <> 0 Then     Errの情報をログに出力   End If End Sub 例えば、上記プログラムの処理Aと処理Cでエラーが発生した場合、 それぞれのエラー情報を出力して、処理Dまでの処理を実行したいです。 しかし、上記のプログラムでは、処理Cのエラーによって処理Aでのエラーが上書きされてしまいます。 処理Aの後にも「Errの情報をログに出力」処理を入れれば良いのかもしれませんが、 実際のプログラムでは、どこでエラーが発生するか分からない前提としたいので、 この方法でエラーを出力しようとすると、プログラムが「Errの情報をログに出力」処理だらけになってしまいます。 何か良い方法はありますでしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数793
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.2

VB6.0自体には触れたことはないのですが(汗)、そこから派生した Access VBAでの経験から・・・ > 何か良い方法はありますでしょうか? 「On Error Resume Next」の代わりに、「On Error Goto」を 使用すれば、目的に適うのではないかと思います。 これを使用すると、エラー発生時には「GoTo」の後に示したラベル 位置のコードに処理が飛びます。 そこで、そのラベル位置以降に記載したコード(ここではエラーログを 記録するコード)を置き、その処理終了後、後続処理を続行する なら「Resume Next」を、エラー発生箇所の再試行を行うなら 「Resume」を、特定の行(→ラベルで指定)に飛ばすなら「Resume ラベル名」を、それぞれ指定します。 つまり、「On Error GoTo」と「Resume Next」の組み合わせを使用 すれば、「エラー発生のつど、ログを記録の上、後続処理を継続」が 可能となります。 あとは、エラーの発生位置を把握できるよう、適当な変数を設置して、 ログにその情報も含めてやればOkです。 Sub Main()   'エラー発生時は「エラー処理:」ラベル以降の処理に飛ばす   On Error GoTo エラー処理   Dim Phase As Integer, sMsg As String   'エラー発生位置を特定するためのインデックス「Phase」を記録   Phase = 1   Err.Raise 12  '処理Aの代わり   Phase = 2   Err.Raise 13  '処理Bの代わり   Phase = 3   Err.Raise 14  '処理Cの代わり   Phase = 4   Err.Raise 15  '処理Dの代わり 終了処理:  '←ラベルであることを示すため、末尾に「:」をつけます。   'エラー発生時以外で「エラー処理:」移行のコードが実行されるのを避けます。   Exit Sub エラー処理:   '必要に応じて、以下のような分岐処理を記述することもできます。   sPhase = "Phase=" & Phase & "にて、Err=" & Err.Number & "が発生しました。"   Select Case Err.Number     Case 12       MsgBox sMsg  'エラーログの記録の代わり       Resume Next       '【後続処理を継続】     Case 13:       If MsgBox(sMsg, vbRetryCancel) = vbRetry Then         Resume        '【エラー発生箇所を再試行】       Else         Resume 終了処理  '【処理中止(「終了処理」に移動)】       End If     Case Else       If MsgBox(sMsg, vbOkCancel) = vbOk Then         Resume Next     '【後続処理を継続】       Else         Resume 終了処理  '【処理中止(「終了処理」に移動)】       End If   End Select End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございました。この方法で実現できました。

関連するQ&A

  • VBでのエラー処理(On Error)

    VBで以下のようなプログラムを書いています。 sub On Error goto Err 処理1 Err: 処理2 End sub 処理1でエラーが発生した場合、Err:の処理に入ってくるのですが、もしErr:の中の処理2でもエラーが発生した場合、どうすればよいのでしょうか? Err:の中でもエラー処理ができるのでしょうか、それともロジックで回避しなければならないのでしょうか? ご存知の方がいらっしゃいましたら宜しくお願いします。

  • ランタイムエラー

    ウイルスバスター2007を実行しようとするとランタイムエラーになってしまい起動できません。再インストールしようと思うのですが、その際にシリアル番号等バージョン情報を入力しないといけないのですが、起動しないため確認できません。メーカーに確認すればよいのでしょうが、時間外の為、受付していませんのでここに質問させていただきました。どなたかシリアル番号等確認する方法をご存知の方よろしくお願いします。

  • vbsで同一ファイルに出力するには

    お世話になります。 vbsでログ出力プログラムを作成しています。 このプログラムは同時に複数のプログラムから呼び出されます。 同時書込みの試験をしていた所、2番目に実行したログ出力プログラムでログ出力に 失敗してしまいました。 ###試験方法### ファイルのオープンとクローズの間にmsgboxを実行し、オープン中を維持した状態で、 ログ出力プログラムを実行し、追記処理を行いました。 ###質問内容### 同時書込みは可能でしょうか。 可能な場合、その方法をご教授頂けますでしょうか。 よろしくお願いいたします。

その他の回答 (1)

  • 回答No.1
  • osamuy
  • ベストアンサー率42% (1231/2878)

NTイベントログに出力するのがお手軽かつお勧め。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答ありがとうございました。

関連するQ&A

  • RealPlayer SPでランタイムエラーがでます。

    RealPlayer SPでランタイムエラーがでます。 先日RealPlayerからRealPlayer SPにアップグレード?したんですが それからというものの、起動するたびにランタイムエラーというのが出て困っています。 (1) ランタイムエラーが発生しました。デバッグしますか? 行:6 エラー:解放されたスクリプトからコードを実行できません。 (2) ランタイムエラーが発生しました。デバッグしますか? 行:1 エラー:'Class'は宣言されていません。 デバッグする知識がないのですが、ないなりにしてみようと思い「はい」を選択すると 「リモートプロシージャにステップイン」というのが出るので、「OK」を選択すると 「Microsoft Jscript 実行時エラー:コノオブジェクトはサポートされていない操作です」と出るので 仕方なく「中断」を選択するという感じです。 それぞれ「いいえ」を選択するとその後操作はできるようになるのですが 途中で何度も出るので煩わしいくて困ってます。 デバッグの仕方、もしくはエラーを出さない方法をご存知の方がいらっしゃいましたら教えてください。 ちなみにOSはXPです。 よろしくお願いいたします。

  • ランタイムエラー

    「ランタイムエラーが発生しました。 デバッグしますか? 行:27 エラー:’width’は宣言されていません。」 以下の使用環境で、上記の「エラー」が発生します。 「デバッグ」で「しない」を選ぶと普通に先に進めますが、「する」を選ぶと「デバッガー」なるものが登場して事態の収拾がつかなくなります(延々とデバッグ作業が、、、」 ブラウザ: Lunascape Lite 3.0.5 OS:Windows XP Home 尚、Lunascape の BBSサイトで「不具合の過去ログ」で参考情報を探そうとしたのですが、今度は別のランタイムエラーが出現して、今後は全く前には進みません。そう言うわけで「Lunascape」の掲示板で参考情報を入手出来ませんでしたので、こちらでお聞きします。 エラーメッセージは下記の通りです。 「ランタイムエラーが発生しました。 デバッグしますか? 行:0 エラー:オブジェクトを指定して下さい。 尚、ついでですが、このサイトで「新しい質問」「回答を投稿」で同様なエラー出現しますが、「デバッグ」を「しない二回」選ぶと前に進むことが出来ます(質問・投稿出来ます) 他に不都合は特にありませんので、これからも「Lunascape Lite」を愛用したいと思いますので、どなたかよろしくお願いします。

  • ランタイムエラーが発生しました。

    Windows98時代のノートPCを使っています。 サイトを見ようとするとランタイムエラーが発生しました。○○をデバッグしますか?というようなメッセージが連続して出てしまい、メッセージが出るたびに一回一回’いいえ’を押さねばならず不便です。 この良く分からないメッセージが出ないようにする方法をご存知の方がいらっしゃいましたら教えてください。

  • エラー発生時のプログラムの行番号の取得 VB2005

    エラー発生時にログを残すようにプログラムを書いているのですが。 Try  処理・・・ Catch  ログを書く処理 End Try エラーが発生した箇所の行番号は取得できないものでしょうか? アドバイスをいただけたら幸いです。 開発環境 VB2005 WinXP Pro

  • VB6 二重起動確実防止について

    VB6 SP5にて2重起動確実な防止処理をいれようとCreateMutex 関数を使用しようと思っています。 CreateMutex 関数を埋め込んでEXEを実行すると 実際に対象となるプログラムが起動しているにも関わらず起動してしまいます。 何がいけないのか?検討がつかず困っています。 下記がプログラムになります。 何かわかりましたらご回答の程、よろしくお願い致します。 ***Win32API**************** Option Explicit ' CreateMutex 関数 Private Declare Function CreateMutex Lib "KERNEL32.DLL" Alias "CreateMutexA" ( _ ByRef lpMutexAttributes As Long, _ ByVal bInitialOwner As Long, _ ByVal lpName As String _ ) As Long ' CloseHandle 関数 Private Declare Function CloseHandle Lib "KERNEL32.DLL" ( _ ByVal hObject As Long _ ) As Long ************************************ SUB MAIN********************************* Public Sub Main() Dim hMutex As Long hMutex = CreateMutex(ByVal 0&, 0&, App.Title) On Error GoTo Err_Main If Err.LastDllError = 0 Then Dim cForm As Form1 Set cForm = New Form1 Call cForm.Show(vbModal) End If Err_Main: If hMutex <> 0 Then Call CloseHandle(hMutex) End If End Sub ************************************************

  • Javaでlog4jを使ってログ出力を行っています。

    Javaでlog4jを使ってログ出力を行っています。 環境は以下の通りです。 j2sdk1.4.2 log4j1.2.8 log4j.xml内で指定したログファイル(test.log)を別のアプリで開いた状態で Javaプログラムを実行するとコンソールに以下のエラーが出力されます。 【エラー発生処理】 DOMConfiturator.configure(log4j.xml); 【エラー内容】 log4j:ERROR setFile(null, true) call failed java.io.FileNotFoundException : test.log(プロセスはファイルにアクセスできません。 別のプロセスが使用中です。) ファイルを開いているために書き込めず、エラーになってしまうのは良いのですが、 ログを出力しないだけで処理自体は続行してしまいます。 (ログを書き込めなかったらそこで処理を終了したいです。) 「書き込めなかった場合に例外をcatchする」等のことは可能でしょうか?

    • ベストアンサー
    • Java
  • ノートン2007でランタイムエラー

    頻繁に発生する悩みです。OSはXPのSP2、メールソフトはMicrosoft outlook、インストールしているウイルス対策ソフトはノートンインターネットセキュリティー2007です。メールの受信中に添付ファイルのついてるメールを受信するとランタイムエラーの表示が出てしまいメールの受信そのものがエラーになってしまいます。ノートンの2004を入れている時にはなかったエラーで、2007にしてから発生します。何か良い対処方法はありませんか?

  • 更新時エラー番号5

    言語:VB5.0 DB:Access で既存プログラムを修正しています。 データの更新時、SQLを記述後に If RunSQL(SQL) <> R_OK Then '実行 Call ErrMsg(1) 'エラーメッセージ Exit Sub 'サブルーチン終了 End If としています。 RunSQLのなかでは、 Function RunSQL(SQL) As Integer On Error Resume Next Dim ErrorCnter As Integer 'エラーカウンター RunSQL = R_OK 'リターンコード(OK) For ErrorCnter = 1 To 5 'エラーカウンター5までループ DB.Execute SQL, dbFailOnError 'エグゼキュート実効 If Err <> 0 Then '失敗時 If ErrorCnter = 5 Then 'エラーカウンター5のとき RunSQL = Err 'リターンコード(エラー) End If Else '成功時 Exit For 'ループぬける End If Next End Function このようになっています。 ある更新をかけたとき、 このエラーにかかってしまいます。 SQLがおかしいのかな?とおもい、 AccessのクエリーにSQLをうつして 実行すると、実行できます。 。。。プロシージャが不正に使われている、 というエラーのようなんですが、 これはどういうことなんでしょうか? データでは,実行できるのに、コーディング上で 実行エラーになる、ということなのですが。。

  • PL/SQLの変数内容出力について

    PL/SQLでの開発にあたり、もし良い方法がありましたら教えて下さい。 例外やORACLEエラー発生時、EXCEPTION処理としてUTL_FILEパッケージを使用したログ出力を行っています。 この際に、その処理の中で使用している全ての変数の内容を出力したいのですが、例えばV$テーブル等で、変数の内容を保持しているようなものは無いでしょうか? 一変数ずつ出力していると大変なので、例えばセッション情報を引数にして、そのセッションで使用されている変数内容を全て出力するようなログ関数を作りたいのです。 以上、よろしくお願いします。

  • VB6.0で実行の度に異なるエラー

    VB6.0,Windows2000で作成したプログラムについてなのですが,立ち上げなおして実行する度に「実行時エラー'6' オーバーフローしました」「インデックスが有効範囲にありません」等のエラーが出て実行できない場合と,正常に実行できる場合があります. (実行の度に実際に異なるエラーが発生している訳ではないと思います) このような現象は何が原因だと考えられるのでしょうか. ご存知の方ご教授ください.