はじめに
ひらちんです。
ユーザーに図のようなダイアログボックスでファイルを指定させて、その後の処理を行うようなプログラムはよくありますね(^o^)
ダイアログボックスでファイルを指定したり開いたりする方法には色々ありますので、今回はそのへんをまとめて紹介します!
GetOpenFilenameメソッド
ApplicationオブジェクトのGetOpenFilenameメソッドです。
引数
FileFilter・・・ダイアログが開いたときに表示させるファイルの種類を指定します。
FilterIndex・・・FileFilterの引数に設定した候補が複数の場合、どれを既定値にするかを指定します。
次のコードは、EXCELブックを候補とするダイアログボックスを開き、ファイルを選択したら”res”という変数に結果を格納するコードのサンプルです。
格納した結果をイミディエイトウィンドウに出力しています。
Sub sample()
Dim res As Variant
res = Application.GetOpenFilename("Excelブック,*.xl??")
Debug.Print res
End Sub
実行すると次のようになります。
画像の通りですが、GetOpenFilenameメソッドは、ダイアログで指定したファイルのフルパスを取得します。
そのまま指定したファイルを開きたい場合は、WorkbooksコレクションのOpenメソッドを使えばいいですね(^o^)
Sub sample()
Dim res As Variant
res = Application.GetOpenFilename("Excelブック,*.xl??")
’指定したファイルを開く
If res <> "False" Then Workbooks.Open res
End Sub
選択せずにキャンセルされた場合は、”False”が返るので、変数”res”が”False”でない場合だけ処理するように分岐しています。
ダイアログを開いたときに表示されるフォルダーは、その時点でのカレントフォルダになります。
指定のフォルダを表示させたい場合は、メソッドを実行する前に、ChDriveステートメントやChDirステートメントを使って、カレントフォルダを予め移動しておきましょう!
Sub sample()
Dim res As Variant
res = Application.GetOpenFilename("Excelブック,*.xl??")
’カレントフォルダを移動する
ChDir "C:\ひらちんの部屋"
’指定したファイルを開く
If res <> "False" Then Workbooks.Open res
End Sub
FindFileメソッド
ApplicationオブジェクトのFindFileメソッドです。
このメソッドは、GetOpenFilenameとは違い、ダイアログボックスで選択すると自動的にファイルが開きます。
次のコードで試してみましょう。
この場合も、キャンセルされたときに備えます。
Falseが返った場合は、メッセージボックスに”キャンセルされました。”と表示しましょう。
Sub sample()
If Application.FindFile = False Then
MsgBox "キャンセルされました。"
End If
End Sub
FindFileメソッド も GetOpenFilenameメソッド と同じようにダイアログを開いたときに表示されるフォルダはカレントフォルダになります。
こちらも、 指定のフォルダを表示させたい場合は、メソッドを実行する前に、ChDriveステートメントやChDirステートメントを使って、カレントフォルダを予め移動しておきましょう!
FileDialogオブジェクト
Application.FileDialog(msoFileDialogOpen)
FileDialogオブジェクトでダイアログボックスを開くと、ボタンの名前を変更したり、最初に開くフォルダを指定したりと詳細な設定が可能です。
サンプルで試してみましょう。
Sub sample()
'FileDialogオブジェクトの準備
Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogOpen)
'詳細のセッティング
FD.Filters.Clear '最初に設定されている候補の表示設定のクリア
FD.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1 '候補の表示設定
FD.InitialFileName = "C:\ひらちんの部屋\" '最初に開くフォルダの設定
'開くボタンが押された場合の処理
If FD.Show = True Then
FD.Execute '開く
Else
MsgBox "キャンセルされました。"
End If
End Sub
大きくは、
- FileDialogオブジェクトの準備
- 詳細のセッティング
- 開く
の段階になります。
詳細セッティングの部分では、これ以外にも様々な設定があります。
FD.Showは、「開く」ボタンが押されたときで、まだ実際には開きませんので注意してください。
FD.Showで開くボタンが押されると、Trueが返ります。
押された場合は、FD.Excuteで開く。
キャンセルや✕で開くが押されなかった場合は、メッセージを表示するように分岐しています。
ちなみに、選択されたファイルのパスは、FileDialogSelectedItemsに保存されます。
先程のコードのファイルを開いた部分を変更して、取得したファイルパスをメッセージボックスで表示するように修正します。
Sub sample()
'FileDialogオブジェクトの準備
Dim FD As FileDialog
Set FD = Application.FileDialog(msoFileDialogOpen)
'詳細のセッティング
FD.Filters.Clear '最初に設定されている候補の表示設定のクリア
FD.Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1 '候補の表示設定
FD.InitialFileName = "C:\ひらちんの部屋\" '最初に開くフォルダの設定
'開くボタンが押された場合の処理
If FD.Show = True Then
MsgBox "選択されたファイルのPathは:" & FD.SelectedItems(1) '変更部分
Else
MsgBox "キャンセルされました。"
End If
End Sub
ちなみに、どのダイアログボックスを開くかという定数は以下のようなものがあります。
定数名 | 意味 |
---|---|
msoFileDialogFilePicker | [参照]ダイアログボックス |
msoFileDialogFolderPicker | [フォルダの選択]ダイアログボックス |
msoFileDialogOpen | [ファイルを開く]ダイアログボックス |
msoFileDialogSaveAs | [名前をつけて保存]ダイアログボックス |
Dialogsコレクション
これでもダイアログボックスを使ってファイルを開くことが出来ます。
Dialogsコレクションの場合は、選択したファイルが自動的に開かれます。
Sub sample()
Application.Dialogs(xlDialogOpen).Show
End Sub
Dialogsコレクションを使うと、”指定の文字列を含むファイル名だけ”などの指定も可能です。
例えば、”test”という文字列を含むファイルだけなどの指定は次のようになります。
Sub sample()
Application.Dialogs(xlDialogOpen).Show "*test*.xls?"
End Sub
いろいろ方法があるので、時と場合に合わせて使い分けれるといいですね(^o^)
コメント