Shell.BrowseForFolderブラウズフォーフォルダー メソッド

本ページには広告が含まれています。

ユーザーがフォルダを選択できるようにするダイアログボックスを作成し、選択したフォルダのFolder オブジェクトを返します。

キャンセルした場合NOTHINGを返します。

ファイルを選択させる場合は、ExcelオブジェクトのApplication.GetOpenFilename メソッド (Excel)を使います。

構文
  1. Folder = Shell.BrowseForFolder( Hwnd, sTitle, iOptions, vRootFolder )
引数
Hwnd (Integer)必須
ダイアログボックスの親ウィンドウのハンドル
sTitle (BSTR必須
ダイアログボックス内に表示される文字列
iOptions (Integer)必須
BROWSEINFO 構造体のulFlagsメンバーからなる値リストの組み合わせ
vRootFolder (Variant省略可
ダイアログボックスで使用する、ルートフォルダを指定する
戻り値
フォルダ選択のダイアログボックスを表示し、選択したフォルダのFolder オブジェクトを返す。

vRootFolder

第四引数のvRootFolderに指定する値によって、表示内容が変化します。

  • 「0」のとき
    BrowseForFolder_0.png
  • 「""(空文字)」のとき
    BrowseForFolder_空文字.png
  • 省略したとき
    BrowseForFolder_省略.png

特殊フォルダを指定するにはShell.NameSpace メソッドでパスを取得します。

UWSC
CONST ssfDESKTOP = 0
CONST ssfPERSONAL = 5
CONST ssfMYMUSICS = 13
CONST ssfMYVIDEOS = 14
CONST ssfMYPICTURES = 39

DIM Shell = CREATEOLEOBJ("Shell.Application")
Shell.BrowseForFolder(0, "", 0, Shell.NameSpace(ssfMYPICTURES).Self.Path)

プログラム実行例

写真の撮影日時毎に枚数を取得

選択したフォルダにある写真の撮影日時を取得・カウントします。

UWSC
DIM Shell = CREATEOLEOBJ("Shell.Application")
Folder = Shell.BrowseForFolder(0, "フォルダを選択してください。", 0)

HASHTBL iColumn

FOR i = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT

HASHTBL dates

FOR i = 0 TO Folder.Items.Count - 1	
	FUKIDASI(i + "/" + Folder.Items.Count)
	DIM FolderItem = Folder.Items.Item(i)
	DIM datetime = Folder.GetDetailsOf(FolderItem, iColumn["撮影日時"])
	IFB datetime = "" THEN
		dates["0000/00/00"] = dates["0000/00/00"] + 1
	ELSE
		deleteControlCharacter(datetime)
		DIM date = text(datevalue(datetime), "yyyy/mm/dd")
		dates[date] = dates[date] + 1
	ENDIF
NEXT

FOR i = 0 TO LENGTH(dates) - 1
	PRINT dates[i, HASH_KEY] + "<#TAB>" + dates[i, HASH_VAL]
NEXT

// 制御文字を削除する
FUNCTION deleteControlCharacter(Var str)
	DIM array[] = CHR(8206), CHR(8207)
	FOR item IN array
		str = REPLACE(str, item, "")
	NEXT
	RESULT = str
FEND
結果
プレーンテキスト
2021/05/29	2
2021/06/01	2
2021/06/02	5
2021/06/03	2
2021/06/04	16
0000/00/00	6
使用関数

選択したファイルを移動する

UWSC
CONST ssfDRIVES = 17

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM source = Shell.BrowseForFolder(0, "移動元フォルダを選択してください。", 0, ssfDRIVES)
IF source = NOTHING THEN EXIT

DIM Folder = Shell.BrowseForFolder(0, "移動先フォルダを選択してください。", 0, ssfDRIVES)
IF Folder = NOTHING THEN EXIT

Folder.MoveHere(source)

MSGBOX(source.Self.Path + " を " + Folder.Self.Path + " に移動しました。")
使用関数

選択したファイルをコピーする

UWSC
CONST ssfDRIVES = 17

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM source = Shell.BrowseForFolder(0, "コピー元フォルダを選択してください。", 0, ssfDRIVES)
IF source = NOTHING THEN EXIT

DIM Folder = Shell.BrowseForFolder(0, "コピー先フォルダを選択してください。", 0, ssfDRIVES)
IF Folder = NOTHING THEN EXIT

Folder.CopyHere(source)

MSGBOX(source.Self.Path + " を " + Folder.Self.Path + " に移動しました。")
使用関数

選択したフォルダ内のサブフォルダを取得

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.BrowseForFolder(0, "フォルダを選択", 0, ssfDesktop)
DIM FolderItems = Folder.Items

FOR FolderItem IN FolderItems
	IFB FolderItem.IsFolder THEN
		Folder = FolderItem.GetFolder
		PRINT Folder.Title
	ENDIF
NEXT
使用関数

選択したフォルダのパスを取得

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.BrowseForFolder(0, "フォルダを選択してください。", 0, ssfDesktop)

PRINT Folder.Self.Path
使用関数

指定したディレクトリ内のフォルダ・ファイル情報を取得

UWSC
CONST ssfDesktop = 0

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.BrowseForFolder(0, "フォルダを選択してください。", 0, ssfDesktop)

FOR n = 0 TO Folder.Items.Count - 1
	DIM FolderItem = Folder.Items.Item(n)
	WITH FolderItem
		PRINT "名前<#TAB><#TAB>" + .Name
		PRINT "サイズ<#TAB><#TAB>" + .Size + " Byte"
		PRINT "更新日時<#TAB>" + .ModifyDate
		PRINT "パス<#TAB><#TAB>" + .Path
		PRINT "種類<#TAB><#TAB>" + .Type
	ENDWITH
	PRINT "----------"
NEXT
使用関数

関連記事

Application.FindFile メソッド (Excel)
[ファイルを開く]タイアログボックスを表示します。ファイルを正しく開けたらTrue、開けなければFalseを返します。
Application.GetOpenFilename メソッド (Excel)
[ファイルを開く]ダイアログボックスを表示します。選択したファイルのパスを戻値として返します。