FileSystemObjectのGetFileNameメソッド
FileSystemObjectのGetFileNameメソッドは、引数で指定したファイルパスのファイル名部分のみを返します。
存在しないドライブやフォルダやファイルを含むファイルパスであっても、ファイルパスとして成立していればファイル名部分が返されます。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Function GetFileName(Path As String) As String
Path | ファイルパスを指定します。パス区切り文字は\または/のどちらでも構いません。 |
戻り値 | 引数ファイルパスの文字列の一番右にあるパス区切り文字から一番右端までの文字列を返します。実際に存在するファイルかどうかの判定は行いません。
引数が”C:\test\a.txt”であれば、”a.txt”が返ります。 引数が”AAA/BBB/CCC”であれば、”CCC”が返ります。 |
フォルダパスを指定した場合
GetFileNameの引数に、ファイル名を含まずフォルダパスだけを指定した場合は、最下層のフォルダ名が返されます。
このことからも分かるように、GetFileNameメソッドはファイルかどうか、というチェックは全く行っておらず、単に引数の文字列からパス区切り文字を検索して、見つかった一番右の位置から右端までの文字列を返しているだけです。
ファイルパスが実際に存在しているファイルかどうかを調べておく必要がある場合には、FileExistsメソッドなどで事前に確認してください。FileExistsメソッドの詳細については「FileSystemObjectのFileExistsメソッド」をご参照ください。
エラー対応
GetFileNameメソッドでは、引数に文字列ではないオブジェクト型の変数を渡すと、実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」が発生します。
このようなエラーが発生すると通常はメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
ファイルパス文字列からファイル名を取得するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub FileSystemObjectGetFileName() '// エラー発生時も処理を継続 On Error Resume Next Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sFilePath '// ファイルパス Dim sFileName '// ファイル名 '// ファイルパスを指定 sFilePath = "C:\test\cc.txt" '// 指定ファイルのFileオブジェクトを取得 sFileName = fso.GetFileName(Path:=sFilePath) '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description Exit Sub End If Debug.Print sFileName End Sub |
指定したファイルパスからファイル名を取得するコードです。
GetFileNameメソッドは引数が文字列ではないオブジェクト変数などの場合にエラーが発生するため、エラー処理「On Error Resume Next」でエラーが発生しても処理を継続するようにしています。
エラーが発生した場合はその内容をイミディエイトウィンドウに出力します。
FileSystemObjectクラスのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。