FileSystemObjectのGetAbsolutePathNameメソッド
FileSystemObjectのGetAbsolutePathNameメソッドは、現在のカレントディレクトリを基準として、引数のパスを考慮した上での絶対パスを返します。
先に書いてしまいますが、カレントディレクトリがどこにあるのかを確認せずにGetAbsolutePathNameメソッドを利用するのは避けた方がよいでしょう。
というのも、Excelでのカレントディレクトリは、ブックの保存ダイアログを開いたときに選択したフォルダが、それ以降はカレントディレクトリになります。ブックの保存をキャンセルしても保存ダイアログでフォルダを変更していればカレントディレクトリは変わります。
そのため、カレントディレクトリはGetAbsolutePathNameメソッド実行時点で期待しているパスではないことが十分に考えられます。
なので、GetAbsolutePathNameメソッドを使うときはカレントディレクトリを事前にきちんと設定していることが前提にした方がよいでしょう。
なお、Excelのオプション設定での「既定のローカルファイルの保存場所」として保存先のパスを設定することができますが、このパスとカレントディレクトリは異なります。既定のローカルファイルの保存場所はApplication.DefaultFilePathで取得や設定ができます。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
事前にカレントディレクトリをセットしてから使う
上で書いたとおり、カレントディレクトリはどこにあるか不定なため、GetAbsolutePathNameメソッドを使う前にChDriveステートメントやChDirステートメントを使ってカレントディレクトリを設定しておいた方がよいです。
FileSystemObjectクラスを使っている場合においては、GetFolderメソッドなどを使って処理中のディレクトリを取得し、それをChDriveとChDirステートメントに渡してカレントディレクトリとして処理することが多いかもしれません。
後述のサンプルコードでは単純にアクティブブックのパスをカレントディレクトリとして処理するコードを書いています。カレントディレクトリの設定については「VBAでカレントドライブとフォルダの変更を行う」をご参照ください。
なお、カレントディレクトリをネットワークのディレクトリにしたい場合はChDriveやChDirでは変更できないため、その場合は「VBAでネットワークドライブにカレントを変更する」をご参照ください。
構文
Function GetAbsolutePathName(Path As String) As String
Path | 絶対パスを取得するための追加パスを指定します。通常はカレントディレクトリに対しての相対パスを指定します。 |
戻り値 | カレントディレクトリと引数のパスから算定された絶対パスを返します。 |
事前設定
以下のサンプルコードでは参照設定で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 |
Sub FileSystemObjectGetAbsolutePathName() Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sPath As String '// パス '// カレントドライブとカレントディレクトリをアクティブブックがあるパスに変更する ChDrive ActiveWorkbook.Path ChDir ActiveWorkbook.Path '// カレントディレクトリの絶対パスを取得 sPath = fso.GetAbsolutePathName("./") Debug.Print sPath '// カレントディレクトリの1階層上の絶対パスを取得 sPath = fso.GetAbsolutePathName("../") Debug.Print sPath End Sub |
実行結果(カレントディレクトリがC:\aaa\bbb\cccの場合)
C:\aaa\bbb\ccc
C:\aaa\bbb
最初にカレントディレクトリを既定するためにChDriveステートメントとChDirステートメントを使ってアクティブブックがあるパスにカレントディレクトリを変更しています。
ChDriveステートメントにはフルパスを指定してもドライブ部分だけを解釈してくれますので、ActiveWorkbook.Pathを設定しても問題ありません。