「activeworkbook.saveas 戻り値」
「excel vba 保存 上書き saveas 戻り値」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
Excel VBAで、WorkbookオブジェクトのSaveAsメソッドの戻りが何なのか、何を返すのかを調べていた方による、検索キーワードです。
Workbook.SaveAsメソッドのヘルプを見ても、「戻り値」という項目は見当たりませんが、ヘルプは間違っていることだってありますから、ヘルプの記載漏れという可能性も否定できません。
Workbook.SaveAsメソッドは何も返さない
まずは結論を。
Workbook.SaveAsメソッドは、何も返しません。
Workbook.SaveAsメソッドに、戻り値はありません。
オブジェクトブラウザーでWorkbook.SaveAsの戻り値を確認する
こういう仕様の確認は、オブジェクトブラウザーが一番です。
そもそも、VBAのメソッドの実体は、Functionプロシージャか、Subプロシージャです。
Functionプロシージャのメソッドは戻り値があり、
Subプロシージャのメソッドには戻り値がありません。
オブジェクトブラウザーで、WorkbookオブジェクトのSaveAsメソッドを選択すると、詳細ペインは下図のように表示されます。
Workbook.SaveAsメソッドの実体は、Subプロシージャであることが明示されています。
つまり、戻り値はありません。何も返しません。
人が作るヘルプは、記載漏れや記述ミスの可能性を否定できませんけれど、オブジェクトブラウザーに表示される項目は実体から作られていますから、疑いようがありません。
オブジェクトブラウザーを使わずに確認するには?
オブジェクトブラウザーを使わずに、Workbook.SaveAsメソッドが何も返さないことを確認するには、どうすればいいのでしょう。
いくつかテストコードを書いて、帰納的に判断するしかないでしょう。
まずWorkbook.SaveAsメソッドが、もしも何らかのデータを返すのだと仮定するのならば、
Sub test_1()
Dim tmp As Variant
tmp = ActiveWorkbook.SaveAs
End Sub
といった形のプロシージャが動くはずです。
が、上記のプロシージャを実行しようとすると「Functionまたは変数が必要です。」という、コンパイルエラーが発生します。
上記のテスト結果からは、少なくともデータを返すのではないと判断できます。
次にWorkbook.SaveAsメソッドが、オブジェクトを返すと仮定するなら、
Sub test_2()
Dim tmp As Object
Set tmp = ActiveWorkbook.SaveAs
End Sub
という形のプロシージャが動くはずです。
先のプロシージャとの違いは、戻りをオブジェクトと過程しているので、変数・tmpをObject型で宣言し、Setキーワードを使っているところです。
この形にしても「Functionまたは変数が必要です。」というコンパイルエラーが発生します。
上記の結果から、オブジェクトを返すわけでもないと判断できます。
最後に、
Sub test_3()
ActiveWorkbook.SaveAs
End Sub
という、戻り値を受け取らない形のプロシージャを書いてみると、これはコンパイルエラーが発生することなく、ちゃんと動きます。
上記のテスト結果から、Workbook.SaveAsは何も返さないメソッドだと判断ができます。
やっぱり、オブジェクトブラウザーで確認するほうが、速く簡単で確実です。
オブジェクトブラウザーを使いましょうよ
英語という外国語を得意な日本人が、英英辞書や英和辞書を使わないという状態を、考えられますか?
VBAも同じです。
VBAの場合、辞書の本体はヘルプですが、ヘルプの索引であり、簡易辞書であり、一部の項目についてはヘルプより詳細を調べることができ確実なのが、オブジェクトブラウザーです。
誰かが作ったマクロのコピペではなく、自分でマクロを作りたいのなら、オブジェクトブラウザーを使いましょう。
分厚い書籍を買わなくても、オブジェクトブラウザーはVBE(Visual Basic Editor)に付属しているのですから。
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » SaveAsメソッドの戻り値は?