エクセルVBAでテキストファイルを新規作成するFileSystemオブジェクトの使い方


write

photo credit: Send me adrift. For you, darling via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

ExcelVBAによるマクロの動作状況をログファイルに残す方法についてシリーズでお伝えしています。

前回の記事はコチラ。

エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラム
ExcelVBAによるマクロの動作状況をログファイルに残す方法を連載でお伝えしています。まず今回はFileSystemオブジェクトを使ってログファイルに書き出す最も簡単なプログラムを紹介します。

指定のテキストファイルにログを書き出す簡単なプログラムを紹介しました。

今回ですが、書き出し先のログファイルが指定のフォルダに存在しなかった場合の処理を追加してみたいと思います。

FileSystemオブジェクトを使っていると、この部分の処理がスッキリ簡単にできちゃいます。

ということで、エクセルVBAでテキストファイルの有無を判定してなければ新規作成する方法についてお伝えします。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

前回作成したプログラムはこちらです。

Sub writeLog()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

With objFso.OpenTextFile(ThisWorkbook.Path & "\error.log", 8)

    .WriteLine Now & vbTab & "エラーが発生しました "
    .Close

End With

Set objFso = Nothing

End Sub

マクロを仕込んでいるエクセルファイルと同階層にある「error.log」というテキストファイルに、タイムスタンプとともに「エラーが発生しました」というログを追加するという内容です。

OpenTextFileで「error.log」をTextStreamオブジェクトとして取り扱えるように開き、その最後尾にWriteLineで指定の内容を一行書き込むという流れになります。

ログファイルが存在していない場合

上記のプログラムですが、指定の場所にファイル「error.log」 が存在していない場合は、以下のように「実行時エラー ’53’: ファイルが見つかりません。」というエラーメッセージが表示されます。

エクセルVBAのエラーメッセージ「ファイルが見つかりません」

今回は、ログファイルが存在していようがいまいがログ出力が正しく動作するように、ログファイルの存在を判定する処理を追加していきたいと思います。

ログファイルの存在を判定する

まず、ログファイルが存在するかどうかを判定するには、FileSystemオブジェクトのFileExistsメソッドを使います。

FileSystemオブジェクト.FileExists(ファイルパス)

ファイルが存在していればTrue、そうでなければFalseが返ります。

以下記事で詳細お伝えしています。

【エクセルVBA】FileSystemオブジェクトでファイルやフォルダが存在するかを判定する
エクセルVBAのFileSystemオブジェクトでファイルやフォルダの操作をする方法をお伝えしています。今回はFileExists、FolderExistsメソッドでファイル・フォルダの存在を判定します。

ですから上記のプログラムの5行目以降に

If Not objFso.FileExists(ThisWorkbook.Path & "\error.log") Then
    'ファイルを新規作成する処理"
End If

を挿入すれば良いということになります。

あとはファイルを新規作成する処理が必要ですね。

CreateTextFileメソッドでテキストファイルを新規作成する

FileSystemオブジェクトではテキストファイルを新規で作成することもできます。CreateTextFileメソッドです。

書き方はこちら。

FileSystemオブジェクト.CreateTextFile(ファイルパス)

ファイルパスはファイル名までを指定します。

以上をまとめると、全体のプログラムは以下のようになりますね。

Sub writeLog()

Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")

Dim strPath As String
strPath = ThisWorkbook.Path & "\error.log"

With objFso
    If Not .FileExists(strPath) Then
        .CreateTextFile (strPath)
    End If
    With .OpenTextFile(strPath, 8) '8:ForAppending
        .WriteLine Now & vbTab & "エラーが発生しました "
        .Close
    End With
End With

Set objFso = Nothing

End Sub

同じファイルパスが何度も出てくるので変数にまとめたのと、Withステートメントを使ってobjFsoでくくりました。

実行しますと、ファイルが存在していない場合でも、以下のようにファイル「error.log」が生成されて

エクセルVBAでログファイルを新規作成

error.logの中身をエディタで見てみますと、以下のようにしっかりとログが記録されます。

エクセルVBAでテキストファイルにログを書き出した

まとめ

エクセルVBAのFileSystemオブジェクトを使って、ログファイルが存在しているかを判別して、ない場合は新規作成をする方法についてお伝えしました。

  • ファイルの存在を判定するFileExistsメソッド
  • 新規のテキストファイルを作成するCreateTextFileメソッド

がポイントです。FileSystemオブジェクト、便利ですね。

さて次回ですが、エラーログを記録する方法についてお伝えしたいと思います。

エクセルVBAでエラーが発生したらエラーの内容をログファイルに書き出すプログラム
エクセルVBAでエラーが発生したときにそのエラーの内容をログファイルに書き出すプログラムを紹介します。On Error Gotoステートメントと、Errオブジェクト、そしてログファイルへの書き出しです。

どうぞお楽しみに!

連載目次:エクセルVBAでマクロの動作状況をログファイルに残す方法

マクロの動作状況やエラーの発生などをログファイルに記録しておきたいときありますよね。本シリーズではFileSystemオブジェクトを使ってログをテキストファイルに書き込む方法についてお伝えしていきます。
  1. エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラム
  2. エクセルVBAでテキストファイルを新規作成するFileSystemオブジェクトの使い方
  3. エクセルVBAでエラーが発生したらエラーの内容をログファイルに書き出すプログラム

タイトルとURLをコピーしました