Digital_Neko

フリーランスプログラマー

Excel VBA ファイル名 ファイルパス取得用クラス

今回はExcel VBAでファイルパスとファイル名を取得するクラスを作成します。
プロジェクトの構成は、標準モジュールにMain。クラスモジュールはFilePathと
しています(図1参照)。

図1 プロジェクトの構成

クラスFilePathの中身は、図2のようになっています。

図2 FilePathクラス

フィールドには、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」にチェックを入れます。

図3 参照設定

ここで、「Dim fso As FileSystemObject」「Set fso = new FileSystemObject」
として、FileSystemObjectのインスタンスを生成します。これを利用し、
「filename = fso.getFilename(filepath)」としてファイル名を取得しています。
getFilenameメソッドに引数として、ファイルパスを渡すことで、ファイル名を
返してくれます。最後にファイルが選択でエラーが返ってきた時のために
エラー処理を追加しています。

次にMainモジュールで動作させます。Mainモジュールの内容は図4になります。

図4 Main

FilePathクラスのインスタンスを生成し、createFilePathメソッドを実行すると
ファイル選択画面が表示されます。

ファイルを選択するとDebug.Printでファイルパスとファイル名を取得する
getterを呼び出しているので、イミディエイトウィンドウには、

図5 イミディエイトウィンドウ

ファイルパスとファイル名が表示されます。

さて今回は、ファイル名とファイルパスを保持するクラスを作成しました。
もしよかったら利用してみてください。