#546 Debug.Printの内容をファイルに出力するサンプルプロシージャ VBA

「Debug.Print」という命令は、VBAのプログラムにおいて、処理途中の変数の内容や処理の進捗状況を示す文字など、さまざまな情報をイミディエイトウィンドウに出力する命令です。

またステップ実行中に直接イミディエイトウィンドウに関数式などをこの命令文とともに書き込むことで、その時点のさまざまな情報を取得することもできます。また、実行中でなくても、ちょっとした関数のテスト、たとえば「Debug.Print Date()」といった命令を実行することで今日の日付をイミディエイトウィンドウに表示させるといった使い方もできます。
イミディエイトウィンドウで直接実行
※プログラム中ではなくイミディエイトウィンドウに直接書き込む場合は「?Date()」という書き方もできます。


イミディエイトウィンドウに出力するだけですので、通常のアプリケーションの動作としては無意味で、主にデバッグ時に利用します。
デバッグ作業においては非常に役立つ命令で頻繁に使われることも多いと思いますが、ただ、大量の情報をイミディエイトウィンドウに出力したいような場合、たとえばテーブルから読み込んだレコードのフィールドの値を出力するような場合には、イミディエイトウィンドウ自体の表示行数の制限もありますし、それに対して検索や抽出を掛けられないという制約もあります。

そこでここでは、Debug.Printの命令によって出力された内容をハードディスク上のファイルにもいっしょに出力するというサンプルプロシージャを紹介します。引数にTabコードやカンマで複数のデータを指定することで、そのテキストファイルをExcelで読み込んで、並べ替えをしたりすることもできます。


ここでは「Debug.Print」という名前ではなく、「DebugPrintFile」というオリジナルな名称のプロシージャとしています。
使い方としては、下記プロシージャを標準モジュール上に記述し、コードウィンドウ上のデータ出力が必要な箇所に「DebugPrintFile Date()」のような書き方で記述します。もちろん引数に、その場その場で必要な変数や関数式など任意に指定することができます。

Public Sub DebugPrintFile(varData As Variant)

  Dim lngFileNum As Long
  Dim strLogFile As String
  
  strLogFile = CurrentProject.Path & "\" & "DebugPrint.txt"
  lngFileNum = FreeFile()
  Open strLogFile For Append As #lngFileNum
  Print #lngFileNum, varData
  Close #lngFileNum
  
  Debug.Print varData

End Sub


なお、このサンプルの場合、データベースがあるのと同じフォルダに常に同名ファイルで出力しています。しかも、Appendモード(追加専用)となっていますので、毎回以前のデータはクリアされるのではなく、呼び出されるたびに前回のデータの後ろにそれが追加されていきます。それについては、このプロシージャをカスタマイズして上書き・追加を切り替えるようにしたり、毎回手作業で出力先ファイルを削除するなど、応用してみてください。


実行例:

Dim dbs As Database
Dim rst As Recordset

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tbl都道府県")
With rst
  Do Until .EOF
    DebugPrintFile !ID & vbTab & !都道府県名
    .MoveNext
  Loop
  .Close
End With

実行後のイミディエイトウィンドウ出力されたテキストファイル
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved