Excel VBA ファイル名 ファイルパス取得用クラス
今回はExcel VBAでファイルパスとファイル名を取得するクラスを作成します。
プロジェクトの構成は、標準モジュールにMain。クラスモジュールはFilePathと
しています(図1参照)。
クラスFilePathの中身は、図2のようになっています。
フィールドには、filepath、filenameを準備します。情報隠蔽をしたいので、
setterは用意していません。その代わり、filepathとfilenameの値を取得
する、getFilepath、getFilename2つのgetterを準備します。
そして、createFilePathメソッドで、フィールドにファイル名とファイルパスを
セットしています。
ここでは、fdをFileDialogオブジェクト型として定義します。
Set fd = Application.FileDialog(msoFileDialogFilePicker)とすることで
ApplicationオブジェクトのFileDialogプロパティを利用し、返すFileDialog
オブジェクトの種類を設定しています。
FileDialogプロパティの引数にmsoFileDialogFilePickerを設定するすることで、
1つ以上のファイル選択を可能にします。
ファイルの選択に成功した場合には、FileDialogの「Show」メソッドが
Trueを返します。Trueを返した時には正常にファイルが取得できているので、
「filepath = fd.SelectedItems(1)」として選択したファイルの1番目を取得
します。複数のファイルを選択すると、コレクションとしてファイルパスが
返ってきます。
さらにこのタイミングでファイル名もfilenameフィールドにセットします。
参照設定で「Microsoft Scripting Runtime」にチェックを入れます。
ここで、「Dim fso As FileSystemObject」「Set fso = new FileSystemObject」
として、FileSystemObjectのインスタンスを生成します。これを利用し、
「filename = fso.getFilename(filepath)」としてファイル名を取得しています。
getFilenameメソッドに引数として、ファイルパスを渡すことで、ファイル名を
返してくれます。最後にファイルが選択でエラーが返ってきた時のために
エラー処理を追加しています。
次にMainモジュールで動作させます。Mainモジュールの内容は図4になります。
FilePathクラスのインスタンスを生成し、createFilePathメソッドを実行すると
ファイル選択画面が表示されます。
ファイルを選択するとDebug.Printでファイルパスとファイル名を取得する
getterを呼び出しているので、イミディエイトウィンドウには、
ファイルパスとファイル名が表示されます。
さて今回は、ファイル名とファイルパスを保持するクラスを作成しました。
もしよかったら利用してみてください。