【VBA】WindowsフォルダやSystem、Tempフォルダを取得する方法
更新日:2024/01/18
Windowsの特殊なフォルダのパスを取得する方法をお伝えします。
特殊フォルダを取得する方法
Windowsフォルダ、Systemフォルダ、Desktopフォルダ等の特殊なフォルダを取得する方法は二つあります。
- FileSystemObjectオブジェクトのGetSpecialFolderメソッド
- WshShellオブジェクトのSpecialFoldersプロパティ
1のGetSpecialFolderメソッドは3つの特殊フォルダに対応するFolderオブジェクトを取得できます。
2のSpecialFoldersプロパティは、18個の特殊フォルダーのパス文字列を取得できます。
ドれぞれの方法で取得できるフォルダに重複がないので、取得したいフォルダに合わせて方法を選択してください。
GetSpecialFolderメソッド
GetSpecialFolderメソッドを使用すると、Windowsの特殊なフォルダのFolderオブジェクトを取得できます。
GetSpecialFolderは、FileSystemObjectのメソッドです。
構文
FileSystemObjectオブジェクト.GetSpecialFolder( SpecialFolder )
- SpecialFolder:取得するフォルダの種類をSpecialFolderConst列挙型で指定する
■SpecialFolderConst列挙型 定数 値 意味 SystemFolder 1 Systemフォルダ
例 c:\Windows\System32TemporaryFolder 2 Tempフォルダ
例 C:\Users\xxx\AppData\Local\TempWindowsFolder 0 Windowsフォルダ
例 C:\Windows
戻り値はFolderオブジェクトです。
このオブジェクトを使用することで、フォルダ内にファイルを作成するなどの処理を行うことができます。
使用例
GetSpecialFolderの使用例です。
各特殊フォルダのFolderオブジェクト取得後に、フルパスを表示しています。
Sub GetSpecialFolderTest()
With CreateObject("Scripting.FileSystemObject")
Debug.Print "【Windows】" & .GetSpecialFolder(WindowsFolder).path
Debug.Print "【System】" & .GetSpecialFolder(SystemFolder).path
Debug.Print "【Temp】" & .GetSpecialFolder(TemporaryFolder).path
End With
End Sub
SpecialFoldersプロパティ
GetParentFolderNameメソッドは3つの特殊フォルダーを取得できましたが、Windowsにはもっと多くの特殊フォルダーがあります。
SpecialFoldersプロパティを参照することで、18個の特殊フォルダーのパスを取得できます。
SpecialFoldersは、Windows Script Host Object Modelに含まれるWshShellオブジェクトのプロパティです。
ツールメニューで上記ライブラリを参照設定した場合は、次の方法でWshShellオブジェクトを取得します。
Dim WsShellObj As New IWshRuntimeLibrary.WshShell
参照設定しない場合は、次の方法で取得します。
Dim WsShellObj As Object
Set WsShellObj = CreateObject("WScript.Shell")
二つの設定方法で記述されているライブラリ名が異なるので注意しましょう。
構文
SpecialFoldersプロパティは、パス名を表す文字列のコレクションです。
対応するキーを指定することで、パスを取得できます。
WsShellObj.GetSpecialFolder( SpecialFolderKey )
- SpecialFolderKey:取得する特殊フォルダパスのキー文字列またはインデックス値
インデックス値 キー文字列 内容 値例 0 AllUsersDesktop 共通デスクトップフォルダ C:\Users\Public\Desktop 1 AllUsersStartMenu 共通スタートメニューフォルダ C:\ProgramData\Microsoft\Windows\Start Menu 2 AllUsersPrograms 共通プログラムフォルダ C:\ProgramData\Microsoft\Windows\Start Menu\Programs 3 AllUsersStartup 共通スタートアップフォルダ C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 4 Desktop デスクトップフォルダ C:\Users\xxx\Desktop 5 AppData アプリデータフォルダ C:\Users\xxx\AppData\Roaming 6 PrintHood プリンタフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Printer Shortcuts 7 Templates テンプレートフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Templates 8 Fonts フォントフォルダ C:\Windows\Fonts 9 NetHood 共有フォルダ情報フォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Network Shortcuts 10 Desktop デスクトップフォルダ C:\Users\xxx\Desktop 11 StartMenu スタートメニューフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu 12 SendTo 送るメニューフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\SendTo 13 Recent 最近使ったファイルフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Recent 14 Startup スタートアップフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 15 Favorites お気に入りフォルダ C:\Users\xxx\Favorites 16 MyDocuments マイドキュメントフォルダ C:\Users\xxx\Documents 17 Programs プログラムメニューフォルダ C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
使用例
次のコードはスタートアップフォルダのパスを、キー文字列とインデックスの二つの方法で表示しています。
Sub test()
Dim WsShellObj As Object
Set WsShellObj = CreateObject("WScript.Shell")
With WsShellObj
Debug.Print WsShellObj.SpecialFolders("Startup")
Debug.Print WsShellObj.SpecialFolders(14)
End With
End Sub
次のように同じパスがイミディエイトウィンドウに出力されます。
C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
更新日:2024/01/18
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。