string(36) "BrowseForFolder メソッド (Shell)" BrowseForFolder メソッド (Shell) | UWSC辞典

BrowseForFolder

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

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

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

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

vRootFolder

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

  • 「0」のとき
  • 「””(空文字)」のとき
  • 省略したとき

特殊フォルダを指定するにはNameSpaceでパスを取得します。

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)

プログラム実行例

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

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

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

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
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder
  3. Shell.Folder.Items
  4. Shell.Folder.Items.Count
  5. FUKIDASI
  6. Shell.Folder.Items.Item
  7. Shell.Folder.GetDetailsOf
  8. text
  9. dateValue
  10. LENGTH
結果
2021/05/29	2
2021/06/01	2
2021/06/02	5
2021/06/03	2
2021/06/04	16
0000/00/00	6

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

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 + " に移動しました。")
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder
  3. Shell.Folder.MoveHere
  4. MSGBOX

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

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 + " に移動しました。")
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder
  3. Shell.Folder.CopyHere
  4. MSGBOX

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

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
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder
  3. Shell.Folder.Items
  4. Shell.FolderItem.IsFolder
  5. Shell.FolderItem.GetFolder
  6. Shell.Folder.Title

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

CONST ssfDesktop = 0

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

PRINT Folder.Self.Path
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder

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

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
  1. CREATEOLEOBJ
  2. Shell.BrowseForFolder
  3. Shell.Folder.Items
  4. Shell.FolderItems.Count
  5. Shell.FolderItems.Item
  6. Shell.FolderItem.Name
  7. Shell.FolderItem.Size
  8. Shell.FolderItem.ModifyDate
  9. Shell.FolderItem.Path
  10. Shell.FolderItem.Type

Was this post helpful?

関連記事

FindFiles
[検索:すべてのファイル]ダイアログボックスを表示します。これは、[スタート]メニューをクリックしてから[検索](またはWindows XPより前のシステムでは同等のもの)を選択するのと同じです。
ShutdownWindows
WindowsSecurity
FindFile
InputBox