デスクトップのフォルダパスを取得する方法を解説します。
Windowsの環境変数を取得するEnviron関数を使用するのが簡単です。
Environ関数を利用する方法
ソースコード
Dim Pathデスクトップ As String Pathデスクトップ = Environ("USERPROFILE") & "\Desktop" ' C:\Users\wfsp\Desktop Dim Pathドキュメント As String Pathドキュメント = Environ("USERPROFILE") & "\Documents" ' C:\Users\wfsp\Documents Dim Pathダウンロード As String Pathダウンロード = Environ("USERPROFILE") & "\Downloads" ' C:\Users\wfsp\Downloads
解説
Environ関数を使用すると、Windowsの環境変数を取得できます。
[USERPROFILE]を指定するとユーザーのCドライブフォルダを取得できるので、
あとはそこに各フォルダ固有のパスを付与すればOKです。
汎用関数化
この手のコードを暗記したりいちいち調べるのも手間なので、
汎用関数にしてしまいましょう。
Function GetPathUserデスクトップ() As String GetPathUserデスクトップ = Environ("USERPROFILE") & "\Desktop" End Function Function GetPathUserドキュメント() As String GetPathUserドキュメント = Environ("USERPROFILE") & "\Documents" End Function Function GetPathUserダウンロード() As String GetPathUserダウンロード = Environ("USERPROFILE") & "\Downloads" End Function ' 使用例 wb出力ブック.SaveAs GetPathUserデスクトップ & "\~~.xlsx"
引数の無い(同PCであれば)常に同じ値を返す関数です。
これを作っておけば、使用例の通りあたかも定数のようにパスを使用できます。
この手の処理をよく行う方は、汎用関数にして持っておきましょう。
WScript.Shellオブジェクトを使用する方法
Environ関数がうまくいかなかった場合の代替案としては、
WScript.Shellオブジェクトを使用する方法もあります。
Dim wshShell As Object Set wshShell = CreateObject("WScript.Shell") Dim Pathデスクトップ As String Pathデスクトップ = wshShell.SpecialFolders("Desktop") ' C:\Users\wfsp\Desktop Dim Pathドキュメント As String Pathドキュメント = wshShell.SpecialFolders("MyDocuments") ' C:\Users\wfsp\Documents
この方法はフォルダパスではなくキー名を指定するため、
キーの一覧は以下の表より選択してください。
| 指定キー | 対象フォルダ | フォルダパス例 |
|---|---|---|
| AllUsersDesktop | 全ユーザー共通のデスクトップ | C:\Users\Public\Desktop |
| AllUsersStartMenu | 全ユーザー共通のプログラムメニュー | C:\ProgramData\Microsoft\ Windows\Start Menu |
| AllUsersPrograms | 全ユーザー共通のプログラム | C:\ProgramData\Microsoft\ Windows\Start Menu\Programs |
| AllUsersStartup | 全ユーザー共通のスタートアップ | C:\ProgramData\Microsoft\ Windows\Start Menu\Programs\StartUp |
| Desktop | デスクトップ | C:\Users\wfsp\Desktop |
| AppData | AppData\Roamingフォルダ | C:\Users\wfsp\AppData\Roaming |
| PrintHood | プリンタショートカットフォルダ | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Printer Shortcuts |
| Templates | Templatesフォルダ | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Templates |
| Fonts | フォントフォルダ | C:\Windows\Fonts |
| NetHood | Network Shortcutsフォルダ | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Network Shortcuts |
| Desktop | デスクトップ | C:\Users\wfsp\Desktop |
| StartMenu | スタートメニュー | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Start Menu |
| SendTo | SendToフォルダ | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\SendTo |
| Recent | 最近使った項目 | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Recent |
| Startup | スタートアップフォルダ | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Start Menu\Programs\Startup |
| Favorites | お気に入り | C:\Users\wfsp\Favorites |
| MyDocuments | マイドキュメント | C:\Users\wfsp\Documents |
| Programs | プログラムメニュー | C:\Users\wfsp\AppData\Roaming\ Microsoft\Windows\Start Menu\Programs |
表にない「ダウンロード」「ピクチャ」「ビデオ」などのフォルダは取得できません。
ドキュメントが「MyDocuments」になっていることからもわかる通り、
昔のまま変わっていないオブジェクトのようですね。
Environ関数の方が簡単で、パスの文字列さえあればどんなフォルダも取得できますが、
何らかの理由でうまく動かなかった場合はこちらもお試しください。