
■ 基本はこれ
ExcelVBAからファイルやフォルダを選択する時、私はGetSaveAsFilenameメソッドを使用していたのですが、これってフォルダの選択には不向きなんですよね。
手軽に使えるので愛用していたのですが、別の手法を試して見ました。
環境は、WindowsXPのExcel2010です。
使うのは、FileDialogオブジェクトです。
With Application.FileDialog(msoFileDialogFolderPicker)
'ダイアログを表示します。
If .Show = -1 Then
'選択したフォルダパスを表示
MsgBox .SelectedItems.Item(1)
End If
End With
実行すると、こうなります。

FileDialogの引数は、以下の4つを指定できるようです。
① msoFileDialogFilePicker:参照(ファイル)
② msoFileDialogFolderPicker:参照(フォルダ)
③ msoFileDialogOpen:ファイルを開く
④ msoFileDialogSaveAs:名前を付けて保存
今回は、フォルダの選択をするので「msoFileDialogFolderPicker」を使用しています。
■ 使い方
簡単に説明します。
① ダイアログの種類を設定
「Application.FileDialog(****)」で、使用したいダイアログの種類を設定します。
一連の設定&取得する箇所なので、Withを使用して固定します。
② ダイアログの表示
Showメソッドを使用して、ダイアログを表示します。
戻値はInteger型で、設定が-1でキャンセルが0になります。まぁ、実際には設定はTrue、キャンセルはFalseで判定した方が良いと思いますけどね。
③ 選択値の取得
選択した値は、SelectedItemsプロパティで取得します。
実体は、FileDialogSelectedItemsインターフェイスで、選択したファイルやフォルダのパスをString型のコレクションとして取得できます。
コレクションというか、実際には一次元配列として取得できると考えれば良いでしょうかね。
サンプルでは、生真面目にItemメソッドまで使用していますが、実際には「.SelectedItems(1)」で取得可能です。
ちなみに、要素の開始値は1です。0じゃありません。
次回:Excelマクロでファイルやフォルダを選択 №2 ファイル参照の基本
目次:目次
■ 後書き
これ、軽い気持ちで使い方を調べているのですが、意外に苦戦しています。
Excel添付のヘルプには簡単な説明と、使用例があるだけで詳しい説明が存在していません。しかもヘルプのFileDialogのリンクを押しても説明ページにたどり着けないし...

まぁ、単純に使うだけならこれで十分なのですが、詳細が分らない機能をなんとなく使うのは怖くてなりません。結局、MSDNライブラリを見ながらこの記事を書いています。
スポンサードリンク


