ファイル操作

【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

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。