■ VB6 エラーの発生した行番号を特定する

実行ファイルを動かしていてエラーが発生すると問題の行がわかりません。
そこで、ソースに行番号を埋め込んでおいて実行ファイルから起動させた時にも特定できるようにします。
Private Sub Command1_Click()
2: On Error GoTo err
3:     Dim a As Integer
4:     a = "a"
5: Exit Sub
err:
7:  MsgBox (CStr(Erl) + "行目 " + err.Description)
8:  End
9: End Sub
実行すると、4行目でエラーが発生するためこのようになります。

数字をラベルの様に扱っていますが、実行時この値が Erl 変数に入っており、
エラー発生時にOn Errorで拾って問題の行を調べる事ができます。

最初の行のPrivate部分とerrのラベル部分は数字を取り付ける事ができませんでした。
プログラムを丸ごと変換してコンパイルできない行を変更すればよさそうです。
ラベル形式にしなくても数字だけでもErl変数に代入されるのですが、実行時に最適化で省略される行があるので正確な行番号でなくなります。


▼ 行番号を付けるツールを作成する

フォームにテキストボックスとボタンを張り付けて次のコードを動くようにします。
テキストボックスはMultiLineをTrueに、ScrollBarsを3-両方に設定したほうが良いと思います。

プログラムを実行し、テキストボックスに目的のコードを張り付けてボタンを押すと行番号が付けられます。
変換後は、プログラムを手動で調整する必要がありますが.....
空白行 Private Public '(コメント) Optionは行番号を付けずにそのまま出力するようにしています。
Option Explicit

Private Sub Command1_Click()
    Dim ar As Variant
    Dim i As Long
    Dim count As Long
    Dim str As String
    ar = Split(Text1.Text, vbNewLine)
    
    For i = LBound(ar) To UBound(ar)
        Dim pos As String
        'Tab スペースを取り除く
        pos = Replace(ar(i), vbTab, "")
        pos = Replace(pos, " ", "")

        If "" = pos Or 1! = InStr(pos, "'") _
            Or 1! = InStr(pos, "Private") _
            Or 1! = InStr(pos, "Public") _
            Or 1! = InStr(pos, "Option") Then
            '空白行 Private Public '(コメント) Optionはそのまま出力する
            str = str + ar(i) + vbCrLf
        Else
            '行番号を取り付ける
            str = str + CStr(count) + ": " + ar(i) + vbCrLf
        End If
        count = count + 1
    Next i
    Text1.Text = str
End Sub


▲トップページ > Visual BASIC と C#