怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - フォルダ選択ダイアログの表示 | BrowseForFolder

フォルダ選択ダイアログを表示するには 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 Folder
  • Hwnd
    ダイアログボックスの親ウィンドウのハンドル。0 で良い。

  • sTitle
    ダイアログボックスに表示するタイトル。

  • iOptions
    ダイアログボックスの表示オプション。
    0 または BROWSEINFO 構造体の ulFlags メンバーにあるフラグの組み合わせを指定できる。

    フラグの一例を以下に挙げる。
    スクリプトでは “0x” の部分を “&h” に変える)

    • 0x00000001
      ファイルシステムに含まれているフォルダのみ選択可能にする。含まれていないフォルダを選んだ場合は OK ボタンが灰色になりクリックできなくなる。
    • 0x00000200
      「新しいフォルダー」ボタンを表示しない。
    • 0x00004000
      ファイルとフォルダを表示する。
  • vRootFolder
    ルートフォルダ。
    フォルダのパス、または ShellSpecialFolderConstants に定義された値を指定できる。
    未指定時はデスクトップがルートとなる。