[VB6] エラートレースルーチンを使用してエラー内容をログファイルに出力

▶ in Visual Basic 6.0 > TIPS posted 2006.09.20 Wednesday / 22:46

デバッグに役立つ手法を紹介します。

  • まず、下記のコードを追加した標準モジュールに作成します。

Option Explicit

'通常は"on"の状態の時にログの書き込みを行う。
'ログの書き込みを停止する場合 "off" にする。
Private Const OutputSw = "on"

'--------------------------------
'  Error_OutputLog プロシージャ
'--------------------------------
Public Sub Error_OutputLog(Keyword As String)

  Dim NewX As Long        'エラーログファイルの使用可能なファイル番号
  Dim LogFile As String   'エラーログファイルのフルパス
 
  'offの場合、ログの書き込みを抑制する
  If OutputSw = "off" Then Exit Sub
 
  NewX = FreeFile
  LogFile = App.Path
  '末尾に¥が付いていなかったら付ける
  If Right$(LogFile, 1) <> "¥" Then
    LogFile = LogFile & "¥"
  End If
  'ログファイルの設定
  LogFile = LogFile & "Error.log"
  'ログファイルが存在しない場合、空のファイルを作成
  If FileExists(LogFile) = False Then
    Open LogFile For Append As #NewX
    Close #NewX
  End If
 
  'ログファイルのサイズが300KB以上のときは一旦削除する。
  If FileLen(LogFile) > 300000 Then
    Kill LogFile
  End If
 
  Open LogFile For Append As #NewX
   
    '各プロシージャのエラーハンドラをトレースする。
    Print #NewX, "エラー  フォーム名またはプロシージャ名 = " & Keyword & " でエラーが発生しています。"
    Print #NewX, "エラー  発生日時 = " & Format$(Now, "yyyy/mm/dd") & " " & Time
    Print #NewX, "エラー  概要(Description) = " & Err.Description
    Print #NewX, "エラー  番号(Number) = " & str(Err.Number)
    Print #NewX, "エラー  (Source) = " & Err.Source & vbCrLf
 
  Close #NewX
 
End Sub


  • 次にエラーをトレースするプロシージャの先頭に以下のコードを追加する。

On Error GoTo <ラベル>
ラベルは任意の文字列を指定してください。
  • そして、そのプロシージャの最後に以下のようなコードを追加する。


Exit  Sub
<ラベル>:
  Call Error_OutputLog("キーワード")
  Err.Clear


  • <ラベル>以下の部分をエラーハンドラと言いますが、そのエラーハンドラの前には必ずExit Subを入れてください。
    でないと、毎回エラーハンドラ部分を実行してしまいます。
    キーワードは、任意の文字列で例えばForm_Load等プロシージャ名をいれておくと良いでしょう。

  • これで、エラーが出た場合、実行ファイルと同じフォルダにError.logというファイルを作成し、エラー情報が書き込まれている事でしょう。そのエラー情報をメモ帳などで見る事でどこでエラーが起きたかが分かりデバッグしやすくなるでしょう。

[VB6] Format関数の定義済み数値書式

▶ in Visual Basic 6.0 > TIPS posted 2006.07.23 Sunday / 22:45

Format関数の定義済み数値書式の使い方を紹介。(MSDNライブラリにも載っています)
[Currency]
通常、Windowsを日本語で使用している場合は頭に¥記号を付加し1000単位の区切り記号も付きます。

使用例:
Dim strPrice As String
Dim lngPrice As Long

lngPrice=19800
strPrice=Format(lngPrice,"Currency")

上記のようにするとstrPriceには 19,800 という結果が返ります。

[Fixed]

整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。1000 単位の区切り記号は付きません。

使用例:
Dim MyStr As String
MyStr=19800.3256

MyStr=Format(MyStr,"Fixed")
上記のようにするとMyStrには
19800.32 という結果が返ります。

[Standard]

整数部を最低 1 桁、小数部を最低 2 桁表示する形式で返します。
1000 単位の区切り記号が付きます。

使用例:
Dim MyStr As String

MyStr=19800.3256

MyStr=Format(MyStr,"Standard")

上記のようにするとMyStrには19,800.32という結果が返ります。

[VB6] CPUの判別方法

▶ in Visual Basic 6.0 > TIPS posted 2004.09.15 Wednesday / 22:43

VBでCPU情報を取得するにはGetSystemInfoというAPIを使用すれば取得できる。
が、細かくCPU名を判別するとなるとGETSystemInfoから得た情報を元にさらに処理を分けなければならない?のでここに判別方法としてVenderID,Family,Model,Steppingを書き留めておくとします。
なお、この結果は2004年9月15日に調査したものなのでかなり古い情報です。
GenuineIntel
Pentium 133MHz 5:2:12
MMX Pentium 200MHz 5:4:3
MMX Pentium 300MHz 5:8:2
Pentium Pro 200MHz 6:1:6
Pentium2 360MHz 6:3:4
Pentium2 400MHz 6:5:2
Celeron 400MHz 6:6:10
Pentium3 500MHz 6:7:2
Pentium3 515MHz? 6:7:3
Pentium3 600MHz 6:8:1
Pentium3(Coppermine) 700MHz 6:8:3
Pentium3(Coppermine) 1GHz 6:8:6
Celeron 700MHz 6:8:6
Celeron 900MHz 6:8:10
Celeron(Coppermine) 1GHz 6:8:10
PentiumM(Banias) 1.70GHz 6:9:5
Pentium3(Tualatin) 1.4GHz-S 6:11:1
Pentium3(Tualatin) 900MHz-M 6:11:4
Celeron(Tualatin) 1.5GHz 6:11:1
Pentium4(Northwood) 1.8GHz 15:2:4
authenticamd
K6 266MHz 5:7:0
K6 300MHz 5:8:0
K6-2 450MHz 5:8:12
K6-3 450MHz 5:9:1
K6-3 500MHz 5:13:0
K7 700MHz 6:1:2
Duron 700MHz 6:3:0
Athlon(Thunderbird) 1000MHz 6:4:2
Athlon(Thunderbird) 1400MHz 6:4:4
Athlon 1200MHz 6:6:1
Duron 900MHz 6:7:0
Duron(Morgan) 1000MHz 6:7:1
AthlonXP(Barton) 1830MHz 6:10:0
Athlon64 3000+ 15:4:8
GenuineTMx86
TM5800 Crusoe 867MHz 5:8:3
PAGE TOP