【VBA】フォルダとファイルを確認して作成する

excelvbaエクセル

VBAでテキストやログを出力することもあります。

そんなときの一連の流れを書いていきます。

スポンサーリンク

概要

テキストファイルを出力する前提で、その日のフォルダを作成して各ファイルを作成するというVBAです。

csv出力やxml出力、log出力などにも使えます。

出力するファイルの内容は一括で変数化しておく前提です。

 

参照設定

今回はFileSystemObjectを使うので参照設定をしましょう。

VBEからツール⇒参照設定⇒「Microsoft Scripting Runtime」にチェックを入れましょう。

フロー

フローとしては

①ファイルを出力するフォルダがあるか
①-1なければフォルダを作成
②出力するファイスがすでに存在しないかを確認
②-1なければファイルを作成
②ー2あれば出力しない
③内容を記載して保存

となります。

ソース

Sub txt_output()
'本日フォルダ確認
Dim fso_dir As FileSystemObject
Set fso_dir = CreateObject("Scripting.FileSystemObject") ' インスタンス化
HT_crntdir = ThisWorkbook.Path 'カレントディレクトリパス
HT_today_dir = HT_crntdir & "\" & Format(Now(), "yyyymmdd") 'パス付本日日付のディレクトリ名
HT_file_name = Format(Now(), "yyyymmdd") & ".txt"
put_text = "テキストの内容はここ"

'存在確認をして無ければ作成
If Dir(HT_today_dir, vbDirectory) = "" Then
Set fl_main = fso_dir.CreateFolder(HT_today_dir) ' フォルダ作成
If IsEmpty(fl_main) Then 'エラー確認
MsgBox "フォルダが作成できませんでした。格納場所を変えて作成してください。"
GoTo err100
End If
End If
'本日ファイル確認
Dim HT_file As Variant
HT_file = Dir(HT_today_dir & "\" & HT_file_name)
If HT_file <> "" Then 'ファイルがあれば終了
MsgBox "ファイルがすでに有ります。格納場所を変えて作成してください。"
GoTo err100
End If

'ファイル出力
Dim outObj As Object
Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化
Set ts = fso.CreateTextFile(HT_today_dir & "\" & HT_file_name, Overwrite:=True, Unicode:=False)
ts.Close ' ファイルを閉じる
'ファイル内容書き込み
Set outObj = CreateObject("ADODB.Stream")
outObj.Type = 2 ' 1: バイナリデータ, 2:テキストデータ
outObj.Charset = "euc-jp" '文字コード
outObj.LineSeparator = 10 ' -1⇒CRLF, 10⇒LF, 13⇒CR
outObj.Open
outObj.WriteText put_text, 0 'テキスト
outObj.SaveToFile HT_today_dir & "\" & HT_file_name, 2 '上書き保存
outObj.Close
Set outObj = Nothing

err100:
End Sub

コメント

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