VBAでテキストファイルを生成する

VBAでテキストファイルを生成する

FileSystemObjectオブジェクトを使う

VBAからテキストファイルって生成できるんかな?」と思ってggってみたら、コチラでFileSystemObjectオブジェクトのCreateTextFileメソッドを使う方法が紹介されていた。

曰く、

FileSystemObject(FSO)を使用して、テキストを作成します。
(中略)

【書式】

object.CreateTextFile( filename [ ,overwrite ,unicode ]
引数・戻り値
  • object ・・・ FileSystemObject オブジェクト または、Folder オブジェクト を指定します。
  • filename ・・・ 作成するテキストファイルのパスを含む名前を文字列で指定します。
  • overwrite ・・・ filename で指定したファイルが存在する場合に、上書きするかどうかを示す Boolean の値を指定します。True を指定した場合、上書きし、False を指定した場合は上書きしません。既定値は、False です。
  • unicode ・・・ Unicode ファイルを作成するか、ASCII ファイルを作成するかを示す Boolean の値を指定します。Unicode ファイルとして作成する場合は True、ASCII ファイルとして作成する場合は False を指定します。省略した場合は、ASCII ファイルが作成されます。
  • 戻り値 ・・・ 新規作成されたテキストファイルを表す TextStream オブジェクト。

ふむふむ。ちょっと素人には飲み込みづらい部分もあるけれど、単にテキストファイルを生成するだけなら簡単そうだ。

やってみた

次のようなコードを書いてみた。

リスト1 標準モジュール
Public Sub createNewTextFile(ByVal fileFullName As String)    '……(1)'
  Dim fsObject As New FileSystemObject    '……(2)'
  Call fsObject.CreateTextFile(fileFullName)    '……(3)'
  Set fsObject = Nothing
End Sub

まず(1)の

Public Sub createTextFile(ByVal fileFullName As String)

で引数の設定。

新しく生成するテキストファイルのフルパスを受け取るようにしている。

(2)の

Dim fsObject As New FileSystemObject

でFileSystemObjectのインスタンスを生成。即変数fsObjectにぶち込む。

どうでもいいけど、こういうとき、大文字小文字を区別しないVBAの仕様がうらめしい……。変数名を「fileSystemObject」とかにしたいんだけれど。

あ、Newするために、VBEの[ツール]→[参照設定]で、Microsoft Scripting Runtimeにチェックを入れています。

あとは、FileSystemObjectオブジェクトのCreateTextFileメソッドを呼ぶだけ。

使ってみる

次のコードで使ってみた。

スト2 標準モジュール
Public Sub testCreateNewTextFile()
  Dim objDir As String    '……(1)'
  objDir = ThisDocument.Path & "\config\"             '"
  If Dir(objDir, vbDirectory) = "" Then MkDir (objDir)    '……(2)'
  Call createNewTextFile(objDir & "ち~んw.txt")    '……(3)'
End Sub

ただテキストファイルを生成するだけだとツマラナイので、ちょっとひねりを加えたバックドロップしてみた。

(1)からの2行

Dim objDir As String
objDir = ThisDocument.Path & "\config\"

で、変数objDirに、このドキュメントのあるフォルダ内の「config」という名前のフォルダのパスを作ってぶち込んでいる。

(2)の

If Dir(objDir, vbDirectory) = "" Then MkDir (objDir)

では、Dir関数を用いて「config」フォルダの存否を確かめ、不存在ならばMkDirで作成するようにしている。

(3)の

Call createNewTextFile(objDir & "ち~んw.txt")

では、リスト1で作成したcreateNewTextFileを呼び出して、「config」フォルダ内に「ち~んw.txt」というテキストファイルを生成する。

実行結果

f:id:akashi_keirin:20180124213427j:plain

スト2実行前のフォルダ内の様子。

スト2を実行すると、

f:id:akashi_keirin:20180124213437j:plain

まず、フォルダ内に「config」フォルダが作成され、「config」フォルダを開くと、

f:id:akashi_keirin:20180124213447j:plain

この通り、「ち~んw.txt」が生成されている。

おわりに

面白くなってきたぞ。ふふふ。

@akashi_keirin on Twitter