はじめに
ひらちんです。
プログラムがきちんと動いているかどうか検証するときに、プログラム内でどのような結果になっているかなど、ログファイルに出力して記録をとっておくと、あとから見返すことが出来て便利です。
今回は、その方法を紹介します!
Openステートメント
ログファイルは、通常はテキストファイルを利用します。
テキストファイルを開くときには、Openステートメントを使います。
※Openステートメントで開かれたファイルは、パソコンの内部で開いているので、画面上には表示されません。
引数名 | 指定 | 説明 |
---|---|---|
pathname | 必須 | ファイル名を指定する文字列、PATHを指定 |
mode | 必須 | ファイルモード(ファイルをどのように開くか)を指定 Append、Binary、Input、Output、 Randomで指定 指定しないと、Randomで開かれる |
access | 省略可 | 開いたファイルに対して許可される操作を指定する Read、Write、Read Writeで指定 |
lock | 省略可 | 開いたファイルに対する他のプロセスからの操作の制限を指定する Shared、Lock Read、Lock Write、Lock Read Writeで指定 |
filenumber | 必須 | 範囲が1以上511以下の有効なファイル番号、次に使用可能な番号を取得するには、FreeFile関数を使用する |
reclength | 省略可 | 32,767(バイト)以下の数値です。ランダムアクセス用に開いたファイルの場合、この値がレコード長になります。シーケンシャルファイルの場合、この値はバッファーされる文字数になります |
引数の設定は色々あるのですが、ここでは簡単にログを出力できる方法をやってみます。
とりあえずここまで、
Sub sample()
'書き込みたいファイル名
Dim FileName As String
FileName = "log.txt"
'ファイルを開く
Open ThisWorkbook.Path & "\" & FileName For Append As #1
'ファイルを閉じる
Close #1
End Sub
「’ファイルを開く」のところでファイルを開いています。
引数は、pathnameに
ThisWorkbook.Path & "\" & FileName
としています。
コードを記述しているファイルのパスに、指定したファイル名(log.txt)を「\」でつないでます。
また、modeに
Append
を指定しています。
これは「追記モード」です。現在記入されているものに追加してテキストを記録していきます。
最後に、filenumberに
#1
を指定しています。
1~511までの番号で任意に指定します。他のプログラムとかで開いているおんなじ番号をしてしてしまうとエラーが起こります。
この番号は、テキストを書き込むときにどのファイルに書き込むかの指定で使います。
どの番号使ってるかなんてわかんねーじゃん。って思った方、安心して下さい。Freefile関数という便利な関数が用意されています。これを使えば、空いてるファイル番号を取得出来ます。
とはいえ、最初のうちは「#1」って指定して、終わったらちゃんと閉じるで問題ないと思います。
では、実行してみましょう!
ここでは、まだ書き込みは行っていませんので、中身は空っぽです。
また、引数:pathname で指定したファイルが存在しない場合は、Append、Binary、Output、または Randomモードでファイルを開くと、そのファイルは自動的に作成されます。
ここでは、log.txt ファイルがない状態で実行しましたので、log.txt が自動で作られているのが分かりますね。
また、「’ファイルを閉じる」のコメント部分の
Close #1
これ重要なので注意してください。
ちゃんとファイルを閉じてあげないと、#1が開きっぱなしになってしまうので、次書き込みたいときに、#1が指定出来なくてエラーになります。
「開いたら、閉じる」
Printメソッド
では、次にファイルにテキストを書き込む方法です。
先程のコードに追記します。
Sub sample()
'書き込みたい文字列
Dim str As String
str = "ひらちんの部屋"
'書き込みたいファイル名
Dim FileName As String
FileName = "log.txt"
'ファイルを開く
Open ThisWorkbook.Path & "\" & FileName For Append As #1
'ファイルに書き込む
Print #1, Now & ":" & str
'ファイルを閉じる
Close #1
End Sub
「’ファイルに書き込む」
Print #1, Now & ":" & str
の部分です。
Now は今の日時、str はコードの初めに指定しています。
filenumberは、開いたファイルに指定した「#1」です。
「#2」で指定してたら「#2」ですよ。
簡単だと思うので、早速実行します!
実行するたびに、log.txtファイルに追記されていくのが分かりますね(^o^)
関数にして繰り返し使えるようにしておく
ログファイルへの出力は、コードの中で繰り返し使うので、関数化して呼び出して使えるようにしておくと便利です。
次のコードは、WriteLogというプロシージャを別で作ってログの書き出しを関数化しています。
※ファイル名とログに出力したい文字列を引数で渡すように指定
Sub sample()
Dim FileName As String
FileName = "log.txt"
Call WriteLog(FileName, "処理開始")
Dim i As Long
For i = 0 To 10
Call WriteLog(FileName, i & ":" & "ひらちんの部屋")
Next
Call WriteLog(FileName, "処理終了")
End Sub
Sub WriteLog(FileName As String, str As String)
'ファイルを開く
Open ThisWorkbook.Path & "\" & FileName For Append As #1
'ファイルに書き込む
Print #1, Now & ":" & str
'ファイルを閉じる
Close #1
End Sub
sampleプロシージャから、Callで呼び出して使っている様子をご覧下さい。
いい感じに出来ましたね(^o^)
コメント