デスクトップなどの特殊なパスを取得するためには、ユーザー名等が入る関係上、普通のやり方では取得できません。
WSH(Windows Script Host)にはWindowsを操作するためのオブジェクトがセットになっており、特殊フォルダのパスが取得できるため、これを使用して取得します。
なお、フォルダを指定するには下記表のインデックス番号または値を指定します。
インデックス | 値 | 名称 | パスサンプル(XP以前) | パスサンプル(Vista以降) |
0 | AllUsersDesktop | デスクトップ(全ユーザ共通) | C:¥Documents and Settings¥All Users¥デスクトップ | C:\Users\Public\Desktop |
1 | AllUsersStartMenu | スタートメニュー(全ユーザ共通) | C:¥Documents and Settings¥All Users¥スタート メニュー | C:\ProgramData\Microsoft\Windows\Start Menu |
2 | AllUsersPrograms | スタートメニューのプログラム(全ユーザ共通) | C:¥Documents and Settings¥All Users¥スタート メニュー¥プログラム | C:\ProgramData\Microsoft\Windows\Start Menu\Programs |
3 | AllUsersStartup | スタートアップ(全ユーザ共通) | C:¥Documents and Settings¥All Users¥スタート メニュー¥プログラム¥スタートアップ | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup |
4, 10 | Desktop | デスクトップ | C:¥Documents and Settings¥<ユーザー名>¥デスクトップ | C:\Users\yuta\Desktop |
5 | AppData | アプリケーションデータ | C:¥Documents and Settings¥<ユーザー名>¥Application Data | C:\Users\yuta\AppData\Roaming |
6 | PrintHood | PRINTHOOD | C:¥Documents and Settings¥<ユーザー名>¥PrintHood | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
7 | Templates | テンプレート | C:¥Documents and Settings¥<ユーザー名>¥Templates | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Templates |
8 | Fonts | フォント | C:¥WINDOWS¥Fonts | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Templates |
9 | NetHood | NETHOOD | C:¥Documents and Settings¥<ユーザー名>¥NetHood | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
11 | StartMenu | スタートメニュー | C:¥Documents and Settings¥<ユーザー名>¥スタート メニュー | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu |
12 | SendTo | 送る | C:¥Documents and Settings¥<ユーザー名>¥SendTo | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\SendTo |
13 | Recent | 最近使ったファイル | C:¥Documents and Settings¥<ユーザー名>¥Recent | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Recent |
14 | Startup | スタートアップ | C:¥Documents and Settings¥<ユーザー名>¥スタート メニュー¥プログラム¥スタートアップ | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
15 | Favorites | お気に入り | C:¥Documents and Settings¥<ユーザー名>¥Favorites | C:\Users\yuta\Favorites |
16 | MyDocuments | マイドキュメント | C:¥Documents and Settings¥<ユーザー名>¥My Documents | C:\Users\yuta\Documents |
17 | Programs | スタートメニューのプログラム | C:¥Documents and Settings¥<ユーザー名>¥スタート メニュー¥プログラム | C:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |
Public Function デスクトップ() Dim obj As Object: Set obj = CreateObject("WScript.Shell") Dim path As String: path = obj.SpecialFolders("Desktop") & "\" デスクトップ = path Set obj = Nothing End Function
Public Function デスクトップ() デスクトップ = CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "¥" End Function
Public Function フォルダの選択() As String Dim objShell As Object 'Shell Dim objFolder As Object 'Shell32.Folder Const strTitle = "フォルダを選択してください。" 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") 'フォルダー参照に設定 Const lngRef = &H1 'ルートフォルダーをデスクトップに設定(5でMy Documents、6でFavoritesなど) Const fldRoot = &H0 Set objFolder = objShell.BrowseForFolder(0, strTitle, lngRef, fldRoot) 'フォルダー名を取出し値を返す If objFolder Is Nothing Then 'キャンセルチェック MsgBox "キャンセルします。" フォルダの選択 = "" '空文字列を返す Else If objFolder.ParentFolder Is Nothing Then '下位を未選択ならデスクトップを返す フォルダの選択 = CreateObject("WScript.Shell").SpecialFolders("Desktop") Else フォルダの選択 = objFolder.Items.Item.path 'パスをセットする End If End If Set objFolder = Nothing Set objShell = Nothing End Function
Public Function フォルダの選択2() As String With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = ThisWorkbook.path & "\" .Show If .SelectedItems.Count = 0 Then MsgBox "キャンセルします。" フォルダの選択2 = "" Exit Function End If フォルダの選択2 = .SelectedItems(1) End With End Function