【VBA】GetTempNameで一時ファイルを作成する方法
更新日:2024/01/18
VBAで一時ファイルを作成して書き込みを行う方法を紹介します。
ランダムなファイル名生成:GetTempName
GetTempNameメソッドは、ファイル名として使用できる文字列をランダムに生成します。
一時ファイルは特定の名前を付けずに、その都度他と重ならない名前を生成する生成するケースが多いです。
このメソッドを使用することで、条件を満たすファイル名を取得できます。
GetTempNameは、FileSystemObjectオブジェクトのメソッドです。
構文
FileSystemObjectオブジェクト.GetTempName
引数はありません。
使用例
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
debug.print fso.GetTempName
実行すると次のような文字列が表示されます。
rad2E712.tmp
仕様として確認できませんでしたが、"rad" から始まり".tmp"で終わる文字列を生成するようです。
一時ファイルなのでファイル名は何でもいいのですが、次のようにGetBaseNameを利用すると、簡単に拡張子を変更できます。
Debug.Print fso.GetBaseName(fso.GetTempName) & ".txt"
一時ファイルを残しておいて後で内容確認を行いたいときなどは、拡張子を変更しておくと分かりやすいです。
一時ファイルの作成例
GetTempNameを使用して一時ファイルを作成する例です。
次の関数createTempFileは、引数で受け取ったフォルダパス内に一時ファイルを作成して、Fileオブジェクトを返します。
Function createTempFile(folderName As String) As Object
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim tmpName As String
With fso
tmpName = .BuildPath(folderName, .GetTempName)
.CreateTextFile(tmpName).Close
Set createTempFile = .GetFile(tmpName)
End With
End Function
この関数は引数で受け取ったフォルダが存在することを前提で動作します。
実際に運用で使うなら、存在確認をした方が良いかもしれません。
BuildPathは二つのパスを区切り文字(\)で連結するメソッドです。
CreateTextFileはファイルを作成してTextStreamオブジェクトを返します。
この時点ではTextStreamオブジェクトを使用しないので、すぐに閉じておきます。
GetFileはパスと一致するファイルのFileオブジェクトを取得するので、そのまま戻り値とします。
次のコードは作成した関数の使用例です。
エクセルのブックがあるフォルダ内に一時ファイルを作成して書き込み、最後に削除しています。
Sub test1()
Dim desktopFolderPath As String
desktopFolderPath = ThisWorkbook.path
Dim tmpFile As Object
Set tmpFile = createTempFile(desktopFolderPath)
Debug.Print tmpFile.path
With tmpFile.OpenAsTextStream(ForWriting)
.Write "test"
.Close
End With
tmpFile.Delete
End Sub
Windowsには一時ファイル専用フォルダ(Tempフォルダ)があるので、そちらを使用するケースもあります。
その場合はGetSpecialFolderでTempフォルダのパスを取得します。
前述のコードを次のように書き換えます。
desktopFolderPath = CreateObject("Scripting.FileSystemObject") _
.GetSpecialFolder(TemporaryFolder)
更新日:2024/01/18
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。