パスの取得

特殊ディレクトリの取得

デスクトップなどの特殊なパスを取得するためには、ユーザー名等が入る関係上、普通のやり方では取得できません。

WSH(Windows Script Host)にはWindowsを操作するためのオブジェクトがセットになっており、特殊フォルダのパスが取得できるため、これを使用して取得します。

なお、フォルダを指定するには下記表のインデックス番号または値を指定します。

インデックス名称パスサンプル(XP以前)パスサンプル(Vista以降)
0AllUsersDesktopデスクトップ(全ユーザ共通)C:¥Documents and Settings¥All Users¥デスクトップC:\Users\Public\Desktop
1AllUsersStartMenuスタートメニュー(全ユーザ共通)C:¥Documents and Settings¥All Users¥スタート メニューC:\ProgramData\Microsoft\Windows\Start Menu
2AllUsersProgramsスタートメニューのプログラム(全ユーザ共通)C:¥Documents and Settings¥All Users¥スタート メニュー¥プログラムC:\ProgramData\Microsoft\Windows\Start Menu\Programs
3AllUsersStartupスタートアップ(全ユーザ共通)C:¥Documents and Settings¥All Users¥スタート メニュー¥プログラム¥スタートアップC:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
4, 10DesktopデスクトップC:¥Documents and Settings¥<ユーザー名>¥デスクトップC:\Users\yuta\Desktop
5AppDataアプリケーションデータC:¥Documents and Settings¥<ユーザー名>¥Application DataC:\Users\yuta\AppData\Roaming
6PrintHoodPRINTHOODC:¥Documents and Settings¥<ユーザー名>¥PrintHoodC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
7TemplatesテンプレートC:¥Documents and Settings¥<ユーザー名>¥TemplatesC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Templates
8FontsフォントC:¥WINDOWS¥FontsC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Templates
9NetHoodNETHOODC:¥Documents and Settings¥<ユーザー名>¥NetHoodC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Network Shortcuts
11StartMenuスタートメニューC:¥Documents and Settings¥<ユーザー名>¥スタート メニューC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu
12SendTo送るC:¥Documents and Settings¥<ユーザー名>¥SendToC:\Users\yuta\AppData\Roaming\Microsoft\Windows\SendTo
13Recent最近使ったファイルC:¥Documents and Settings¥<ユーザー名>¥RecentC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Recent
14StartupスタートアップC:¥Documents and Settings¥<ユーザー名>¥スタート メニュー¥プログラム¥スタートアップC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
15Favoritesお気に入りC:¥Documents and Settings¥<ユーザー名>¥FavoritesC:\Users\yuta\Favorites
16MyDocumentsマイドキュメントC:¥Documents and Settings¥<ユーザー名>¥My DocumentsC:\Users\yuta\Documents
17ProgramsスタートメニューのプログラムC:¥Documents and Settings¥<ユーザー名>¥スタート メニュー¥プログラムC:\Users\yuta\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

サンプル1

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

サンプル2

Public Function デスクトップ()
	デスクトップ = CreateObject("WScript.Shell").SpecialFolders.Item("Desktop") & "¥"
End Function

フォルダ選択ダイアログを表示

フォルダの選択1

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

フォルダの選択2

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