Word VBA(Visual Basic for Applications)で開いているすべてのファイルを上書き保存するマクロを紹介する記事の中で、
Documentsコレクションオブジェクトにも
Documentオブジェクトにも
Saveメソッドがあることに触れました。
この記事を読んだExcelマクロを作れるレベルの方は、Excel VBAのWorkbooksコレクションオブジェクトにもSaveメソッドがあるのではないのか、と感じるかもしれません。
オブジェクトブラウザーでWorkbooksコレクションオブジェクトにSaveメソッドがないか確認する
結論から言うと、Excel VBAにWorkbooks.Saveメソッドはありません。
オブジェクトブラウザーで確認すれば一目瞭然です。
オブジェクトブラウザーで、「save」を完全一致で検索してみると下図のとおり、SaveメソッドがあるのはWorkbookオブジェクトだけであることがわかります。
(Excel 2013ではApplicationオブジェクトにもSaveメソッドが存在します)
念のために非表示のメンバーをOnにして、Workbooksコレクションオブジェクトのメンバーを確認しても、Saveというメンバーは見あたりません。
こういうことを確認するのに、やはりオブジェクトブラウザーは必須です。
ループ処理が必要か不要か
Excelマクロの学習を始めたばかりの頃のハードルはいくつかありますが、大きなハードルの一つがループ処理です。
For ~ Next文とFor Each ~ Next文を混同して変数のインクリメントを忘れてしまったり、Do ~ Loop文で条件を書き間違えて無限ループにしてしまったりという道を多くの方が通るはずです。
このような、文法知識が曖昧なためにやってしまうミスと共に、行いたい処理が、ループ文を使わなければできないことなのか、ループ文を使わなくてもできることなのか判断できないというハードルがあります。
このループ処理が必要か不要かの判断と、今回のSaveメソッドの件は関係しています。
ループ処理が必要か不要かを判断するのに、コマンドが存在するかどうかが役立ちます。
一括して処理を行うコマンドが存在しているようなものは、VBAでループを使わなくても処理できる可能性が、非常に高いのです。Excelに限らず、WordでもPowerPointでも。
Wordには[すべて保存]というコマンドが存在しています。
Word VBAにもDocuments.Saveメソッドが存在していますから、ループ処理をしなくてもすべて上書き保存することができます。
Excelには[すべて保存]というコマンドは存在していません。
Excel VBAにもWorkbooks.Saveメソッドも存在していませんから、ループ処理しないとすべて上書き保存することができません。
Excelには[すべて閉じる]というコマンドは存在しています。
Excel VBAにもWorkbooks.Closeメソッドも存在していますから、ループ処理しなくてもWorkbooks.Closeメソッドですべてのブックを閉じることができます。
このことが、Excelのことを知らないけれどプログラミングできる人の作ったExcelマクロが、やたら遅い原因の一つだったりもします。(ループ文を使わなくてもいいことを、Excelのコマンドを知らないため無駄にループ処理してしまったりするからです)
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » WorkbooksコレクションオブジェクトにSaveメソッドはないのか