特殊フォルダは忘れやすい
年に数回程度ではありますが、たまに特殊フォルダのフォルダパスを知りたい場合があります。
多いのは右クリックの「送る」にショートカットを置きたい場合に、SendToフォルダってどこだっけ?とかですね。
そういう特殊フォルダはWshShellクラスのSpecialFoldersプロパティを使って取得できるWshCollectionオブジェクトに格納されています。
CollectionやDictionaryなどと同じように、コレクションクラスのため、全ての特殊フォルダを取得したい場合はループ処理で取得する必要があります。
事前準備
以下のコードではWshShellクラスを参照設定で利用できるようにしています。
WshShellの参照設定は、VBA画面→ツールメニュー→参照設定で「Windows Script Host Object Model」を選択します。これでWshShellクラスを利用できるようになります。
以下はWshShellクラスのインスタンス変数の作成サンプルです。書き方は2通りあります。どちらでもいいです。1つ目のように1行で書いてもいいですし、2つ目のように変数定義とSetを別に書いてもいいです。
1 |
Dim obj As New IWshRuntimeLibrary.WshShell |
1 2 |
Dim obj As IWshRuntimeLibrary.WshShell Set obj = New IWshRuntimeLibrary.WshShell |
厳密には2行に分けた方がいいのですが、私は1行で書くことが多いです。詳細は「VBAでクラス変数の宣言とNewを1行で書いてよいか」をご参照ください。
コード
WshShellクラスを使って特殊フォルダを列挙するコードです。
ここではイミディエイトウィンドウに特殊フォルダを全て出力しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub SpecialFoldersTest() Dim wsh As New IWshRuntimeLibrary.WshShell Dim col As IWshRuntimeLibrary.WshCollection Dim i '// 特殊フォルダのコレクションをWshCollectionとして取得 Set col = wsh.SpecialFolders '// WshCollectionをループ For i = 0 To col.Count - 1 '// 特殊フォルダパスをイミディエイトウィンドウに出力 Debug.Print col.Item(i) Next End Sub |
実行すると以下のように特殊フォルダがイミディエイトウィンドウに列挙されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
C:\Users\Public\Desktop C:\ProgramData\Microsoft\Windows\Start Menu C:\ProgramData\Microsoft\Windows\Start Menu\Programs C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup C:\Users\LoginUser\Desktop C:\Users\LoginUser\AppData\Roaming C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Printer Shortcuts C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Templates C:\Windows\Fonts C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Network Shortcuts C:\Users\LoginUser\Desktop C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Start Menu C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\SendTo C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Recent C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup C:\Users\LoginUser\Favorites C:\Users\LoginUser\Documents C:\Users\LoginUser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |