フォルダ選択ダイアログを表示するには BrowseForFolder を使う。
サンプルスクリプト
次のスクリプトは、デスクトップをルートとしたフォルダ選択ダイアログを表示する。
'シェルオブジェクト生成 Dim shellApp Set shellApp = CreateObject("Shell.Application") 'フォルダ選択ダイアログを表示 Dim folder Set folder = shellApp.BrowseForFolder(0, "Select folder", &h00000200, 0) '選択されたフォルダのパスを表示 If Not folder Is Nothing Then '選択されたフォルダのパスを表示 WScript.Echo folder.Self.Path WScript.Echo "----------------------------------------" '選択されたフォルダのサブフォルダやファイルのパスを表示 Dim item For Each item In folder.Items WScript.Echo item.Path Next End If 'オブジェクト解放 Set folder = Nothing Set shellApp = Nothing
解説
まずは CreateObject 関数で Shell オブジェクトを生成する。
Set shellApp = CreateObject("Shell.Application")そして BrowseForFolder メソッドを呼び出す。
Set folder = shellApp.BrowseForFolder(0, "Select folder", &h00000200, 0)フォルダが選択されればフォルダオブジェクトを返す。
返されるのは FileSystemObject のフォルダオブジェクトではなく、Shell のフォルダオブジェクトであるので注意すること。
選択されなければ Nothing を返す。
選択されたフォルダの情報は、フォルダオブジェクトの Self プロパティで参照する。
WScript.Echo folder.Self.Pathサブフォルダやファイルの情報は、フォルダオブジェクトの Items プロパティで参照する。
Dim item For Each item In folder.Items WScript.Echo item.Path Next
(Self は FolderItem2 オブジェクト、Items は FolderItem2 オブジェクトのコレクション)
FolderItem2 オブジェクトからは、次の内容が主に取得できる。
| プロパティ名 | 説明 | 例 |
|---|---|---|
| IsBrowsable | ブラウザまたはエクスプローラでホストできるかどうか | False |
| IsFileSystem | ファイルシステムの一部かどうか | True |
| IsFolder | フォルダかどうか | True |
| IsLink | ショートカットかどうか | False |
| ModifyDate | 最後に変更された日時 | #2024/01/23 15:54:53# |
| Name | 項目名 | “Windows” |
| Path | 項目の絶対パス | “C:\Windows” |
| Size | サイズ | 0 |
| Type | 項目の型を文字列で表現した内容 | “ファイル フォルダー” |
BrowseForFolder の構文
BrowseForFolder( Hwnd, sTitle, iOptions, [vRootFolder] ) As FolderHwnd
ダイアログボックスの親ウィンドウのハンドル。0 で良い。sTitle
ダイアログボックスに表示するタイトル。iOptions
ダイアログボックスの表示オプション。
0 または BROWSEINFO 構造体の ulFlags メンバーにあるフラグの組み合わせを指定できる。フラグの一例を以下に挙げる。
(スクリプトでは “0x” の部分を “&h” に変える)- 0x00000001
ファイルシステムに含まれているフォルダのみ選択可能にする。含まれていないフォルダを選んだ場合は OK ボタンが灰色になりクリックできなくなる。 - 0x00000200
「新しいフォルダー」ボタンを表示しない。 - 0x00004000
ファイルとフォルダを表示する。
- 0x00000001
vRootFolder
ルートフォルダ。
フォルダのパス、または ShellSpecialFolderConstants に定義された値を指定できる。
未指定時はデスクトップがルートとなる。