↑この記事を書いている時にCurDir関数を使ってカレントディレクトリパスを取得しようとしたら、なぜかドキュメントパスが参照されました。
原因だけ知りたい方は「カレントディレクトリが変なのはExcelの仕様らしい」をクリック!
カレントディレクトリとは?
カレントディレクトリというのは、ざっくりいえば今作業しているファイルがどこにあるかを示す住所みたいなものです。
上の図では、デスクトップ内にある「【Excel VBA】日報」というフォルダ内にマクロ実行ファイル「日報作成マクロ」が格納されています。
「日報作成マクロ」ブックのカレントディレクトリは、パスで表記すると
“C:\Users\mameg\Desktop\【Excel VBA】日報”
となります。
ブックのカレントディレクトリを調べる
ということで、実際に「日報作成マクロ」ブックのカレントディレクトリを調べてみます。
「日報作成マクロ」ブックに下記のコードを実行してみます。
1 2 3 4 |
Sub Test() 'カレントディレクトリを確認 Debug.Print CurDir End Sub |
これはカレントディレクトリをイミディエイトウィンドウに表示してくれるコードです。
さて結果は…
んー…バグってますかね?
カレントディレクトリが変なのはExcelの仕様らしい
この結果を初めてみたとき、自分のカレントディレクトリの解釈がおかしいのかと疑いました。
しかし色々ネットで調べてみたところ、どうやらExcelのカレントディレクトリはドキュメントがデフォルトになっているとのこと。
そのため、マクロを実行しているブックをドキュメント以外に格納してもカレントディレクトリはドキュメントになってしまうみたいです。
ちなみにデフォルトのカレントディレクトリは「Excelのオプション」→「保存」→「既定のローカルファイルの保存場所」で確認できます。
VBAでカレントディレクトリパスを取得する方法
CurDirではなくThisWorkbook.Pathと記述すればマクロを実行しているブックのカレントディレクトリパスが取得できます。
「日報作成マクロ」ブックにさっきのコードを修正して実行してみます。
1 2 3 4 |
Sub Test() 'カレントディレクトリを確認 Debug.Print ThisWorkbook.Path End Sub |
さて、結果は…
あーよかった。
コメント