Excel VBA ファイル名 ファイルパス取得用クラス
今回はExcel VBAでファイルパスとファイル名を取得するクラスを作成します。
プロジェクトの構成は、標準モジュールにMain。クラスモジュールはFilePathと
しています(図1参照)。
![](https://nekoni-gohan.com/wp-content/uploads/2021/06/997ecebf228842e260b82c719744b3e3.png)
クラスFilePathの中身は、図2のようになっています。
![](https://nekoni-gohan.com/wp-content/uploads/2021/06/0619407d8f23b1c25acc4dcd1eafe3f1.png)
フィールドには、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」にチェックを入れます。
![](https://nekoni-gohan.com/wp-content/uploads/2021/06/Scripting.png)
ここで、「Dim fso As FileSystemObject」「Set fso = new FileSystemObject」
として、FileSystemObjectのインスタンスを生成します。これを利用し、
「filename = fso.getFilename(filepath)」としてファイル名を取得しています。
getFilenameメソッドに引数として、ファイルパスを渡すことで、ファイル名を
返してくれます。最後にファイルが選択でエラーが返ってきた時のために
エラー処理を追加しています。
次にMainモジュールで動作させます。Mainモジュールの内容は図4になります。
![](https://nekoni-gohan.com/wp-content/uploads/2021/06/3ba2ef8a282cf8d5e1b62cc721f16d53.png)
FilePathクラスのインスタンスを生成し、createFilePathメソッドを実行すると
ファイル選択画面が表示されます。
ファイルを選択するとDebug.Printでファイルパスとファイル名を取得する
getterを呼び出しているので、イミディエイトウィンドウには、
![](https://nekoni-gohan.com/wp-content/uploads/2021/06/039c205ba55356ac8af5bf9c964c51f0.png)
ファイルパスとファイル名が表示されます。
さて今回は、ファイル名とファイルパスを保持するクラスを作成しました。
もしよかったら利用してみてください。