目次
問題
新規ブックを作ってマクロを書いていたところ、 ActiveWorkbook.Path が取得できない。 Ctrl + Space で表示される入力候補の中から ActiveWorkbook を選んで、 ドット( . )を入れて、 更に出てくる入力候補から Path プロパティを選んでいるのでコードは間違っていないはず。
しかし、 Msgbox 関数、 Debug.Print メソッドで表示した ActiveWorkbook.Path の結果は空白のまま。
ExcelVBA のコード :
Sub アクティブワークブックパス取得()
MsgBox ActiveWorkbook.Path 'ワークブックの保存されている場所が表示さるはずでした。
End Sub
Msgbox 関数の実行結果 :
![なぜか空白です。](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-msgbox-unsaved.png)
解決
原因は早々にわかりました。それは、新規ブックを未保存で実行していたためでした。新規ブックを保存後に、 ActiveWorkbook.Path を実行すると正常に表示されました。
![未保存のワークブック](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-workbook-unsaved.png)
新規ブックを未保存の場合で、 Msgbox 関数を実行すると、空白というのか文字としては、何もありませんでした。
![なぜか空白です。](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-msgbox-unsaved.png)
ワークブックをデスクトップに保存してみます。
![保存済みのワークブック](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-workbook-saved.png)
そして、再度 Msgbox 関数を実行してみます。そうすと、今度は、 ActiveWorkbook.Path が表示されています。
![保存した場所が表示されています。](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-msgbox-saved.png)
もう一つのエラー
もう一つエラーの原因があるかもしれません。それは、以下のコードのように Path プロパティを返す宛というか先がない場合です。上記の最初のコードのように Msgbox に結果を返すとか、 a = の式のようにして、 a に結果返すとすれば良いのだと思います。
ExcelVBA のコード :
Sub アクティブワークブックパス取得_02()
ActiveWorkbook.Path 'エラーになります。
End Sub
![Visual Basic Editor のスクリーンショット。もう一つのエラー。](https://pulogu.net/wordpress/wp-content/uploads/2016/08/000837-another-error.png)
この場合はとりあえず、 a = ActiveWorkbook.Path のような式になっていれば、エラーにはならないようです。
ExcelVBA のコード :
Sub アクティブワークブックパス取得_03()
a = ActiveWorkbook.Path 'とりあえずエラーにはなりません。変数 a に Path の結果が入っているので、この後の処理で使用することもできます。
End Sub
参考情報
MSDN
- Workbook.Path プロパティ (Excel)
- MsgBox 関数 - https://msdn.microsoft.com/ja-jp/library/office/gg251821.aspx
- Print メソッド - https://msdn.microsoft.com/ja-jp/library/office/gg264286.aspx
あとがき
原因が全く分からないまま、 Excel 、パソコンの再起動をかけてみたりしていました。
以上、閲覧ありがとうございました。