DOBON.NET DOBON.NETプログラミング掲示板過去ログ

どこの行でエラーが発生したか調べたいのですが

環境/言語:[環境 Windows XP 使用言語 Visual Basic 6.0]
分類:[VB6以前]

度々すみません。

どこのプログラムの行でエラーが発生したか調べたいのですが
エラー処理はエラー番号(Err.Number),Err.Description(エラーに関連する説明)
で行っています。そしてエラーが発生した次の行から実行しています(Resume Next)
Resumeから行が取得できれば良いのですができませんでした。
エラーが発生した所の行を表示することは可能でしょうか。
Err.Source(最初にエラーを生成したオブジェクトまたはアプリケーションの名前を示すString型の式を返す)
で追いかけてみてはいかがでしょうか。
もょもと さん

幾度に渡りご回答ありがとうがざいます。
Err.Sourceにより表示できることで追いかけてみます。
本当にありがとうございました。
2008/08/11(Mon) 18:37:36 編集(投稿者)

■No22684に返信(YAMATOさんの記事)
> エラーが発生した所の行を表示することは可能でしょうか。

隠し関数「Erl」で取得できます(戻り値は Long です)。

ただしこれは、『エラー発生前に、最後に通過した行番号』を返すので、
あらかじめ行番号を埋め込んでおかないと意味がありません。

下記では、あらゆる行に行番号を指定していますが、実際には
「エラーが起きそうな場所」に重点的に配置するだけでも役には立ちます。

'-----------------------
Option Explicit

Private Sub Main()

On Error GoTo YAMATO
100:  Dim A As Double
110:  A = 100 / CDbl(InputBox("数値[その1]を入力", , "1"))
120:
130:  Dim B As Double
140:  B = 100 / CDbl(InputBox("数値[その2]を入力", , "1"))
150:
160:  Dim C As Double
170:  C = A / B
180:
190:  MsgBox FormatNumber(C), vbSystemModal
200:  Exit Sub
YAMATO:
210:  Dim result As VbMsgBoxResult
220:  result = MsgBox( _
        "Num=" & CStr(Err.Number) & vbCrLf _
       & "Erl=" & CStr(Erl) & vbCrLf _
       & "Src=" & Err.Source & vbCrLf _
       & "Msg=" & Err.Description, _
        vbRetryCancel)
230:  If result = vbRetry Then
240:    Resume
250:  End If
End Sub
'-----------------------


なお、行番号の埋め込みなどは、手動で行うのは大変なので、
何らかのツールを使った方が良いかと思います。たとえば、
下記 MZ-Tools 3.0 の「Add Line Numbers」機能とか。

http://www.mztools.com/v3/mztools3.aspx</pre></pre>
魔界の仮面弁士 さん

ご回答ありがとうございました。
詳細な「エラーが起きそうな場所」大変貴重な情報をご提供して下さいまして
お礼を申し上げます。指導してもらいました下記 よりダウンロード後
Visual Basic「Add Line Numbers」機能により番号の埋め込みが自動でできま
した。
>MZ-Tools 3.0 の「Add Line Numbers」機能とか。
>http://www.mztools.com/v3/mztools3.aspx</pre></pre>
そしてご指導してもらいました隠し関数「Erl」を追加しました。
それによりエラー発生した行番号を返すことができるようになりました。
以前から知りたかったことが今回解決することができました。
今後はVisual Basic 使用には必ず使用するつもりです。
心強いツールの一つとなりました。本当にありがとうがざいました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板