ファイル操作

【VBA】WindowsフォルダやSystem、Tempフォルダを取得する方法

更新日:2024/01/18

Windowsの特殊なフォルダのパスを取得する方法をお伝えします。

 

特殊フォルダを取得する方法

Windowsフォルダ、Systemフォルダ、Desktopフォルダ等の特殊なフォルダを取得する方法は二つあります。

1のGetSpecialFolderメソッドは3つの特殊フォルダに対応するFolderオブジェクトを取得できます。

2のSpecialFoldersプロパティは、18個の特殊フォルダーのパス文字列を取得できます。

ドれぞれの方法で取得できるフォルダに重複がないので、取得したいフォルダに合わせて方法を選択してください。

 

GetSpecialFolderメソッド

GetSpecialFolderメソッドを使用すると、Windowsの特殊なフォルダのFolderオブジェクトを取得できます。
GetSpecialFolderは、FileSystemObjectのメソッドです。

構文

FileSystemObjectオブジェクト.GetSpecialFolder( SpecialFolder )
  1. SpecialFolder:取得するフォルダの種類をSpecialFolderConst列挙型で指定する
    ■SpecialFolderConst列挙型
    定数意味
    SystemFolder1Systemフォルダ
    例 c:\Windows\System32
    TemporaryFolder2Tempフォルダ
    例 C:\Users\xxx\AppData\Local\Temp
    WindowsFolder0Windowsフォルダ
    例 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 )
  1. SpecialFolderKey:取得する特殊フォルダパスのキー文字列またはインデックス値
    インデックス値キー文字列内容値例
    0AllUsersDesktop共通デスクトップフォルダC:\Users\Public\Desktop
    1AllUsersStartMenu共通スタートメニューフォルダC:\ProgramData\Microsoft\Windows\Start Menu
    2AllUsersPrograms共通プログラムフォルダC:\ProgramData\Microsoft\Windows\Start Menu\Programs
    3AllUsersStartup共通スタートアップフォルダC:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
    4DesktopデスクトップフォルダC:\Users\xxx\Desktop
    5AppDataアプリデータフォルダC:\Users\xxx\AppData\Roaming
    6PrintHoodプリンタフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
    7TemplatesテンプレートフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Templates
    8FontsフォントフォルダC:\Windows\Fonts
    9NetHood共有フォルダ情報フォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Network Shortcuts
    10DesktopデスクトップフォルダC:\Users\xxx\Desktop
    11StartMenuスタートメニューフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu
    12SendTo送るメニューフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\SendTo
    13Recent最近使ったファイルフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Recent
    14StartupスタートアップフォルダC:\Users\xxx\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
    15Favoritesお気に入りフォルダC:\Users\xxx\Favorites
    16MyDocumentsマイドキュメントフォルダC:\Users\xxx\Documents
    17Programsプログラムメニューフォルダ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

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

スポンサーリンク

記事の内容について

null

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

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

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

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

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

 

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