Excel VBAの入門書である拙著『いちばんやさしいExcel VBAの教本』では、WorkbookオブジェクトについてはChapter 13で少し触れるにとどめています。
Lesson 75「WorkbooksとWorkbookのプロパティ・メソッドについて学習しましょう」でご紹介しているSaveAsメソッドは、
実行時エラーが表示される可能性が高いので、補足をしておきます。
SaveAsメソッドで実行時エラーの表示されるケース
Workbook.SaveAsメソッドの具体例として、拙著では
ActiveWorkbook.SaveAs "c:\tmp\SAMP.xlsx"
Workbooks(1).SaveAs "c:\tmp\SAMP.xlsx"
というコードをあげていますが、これらのコードは実行時エラーが表示される可能性が結構あります。
マクロを含むブックがアクティブな状態では、
ActiveWorkbook.SaveAs "c:\tmp\SAMP.xlsx"
で実行時エラーが発生します。
マクロを含むブックが最初に開かれたブックのときに、
Workbooks(1).SaveAs "c:\tmp\SAMP.xlsx"
で実行時エラーが発生します。
SaveAsメソッドで実行時エラーの表示される理由
Excelに限らず、Microsoft Officeは2007になるときにファイルフォーマットを変更して、マクロを含む場合は拡張子も通常のものとは別になりました。
そのため、Excelでマクロを含むブックを通常の拡張子「.xlsx」で名前を付けて保存しようとすると、
「次の機能はマクロなしのブックに保存できません」
という警告が表示されます。
これと同じ理由により、
ActiveWorkbook.SaveAs "c:\tmp\SAMP.xlsx"
Workbooks(1).SaveAs "c:\tmp\SAMP.xlsx"
というコードで実行時エラーが表示されることがあります。
アクティブなブックや最初に開かれたブックがマクロを含むにも関わらず、引数で「.xlsx」と、マクロを含まないブックの拡張子を指定しているためです。
上記の実行時エラーを発生させないために
Workbook.SaveAsメソッドの実行時エラーを真面目に回避するためには、いろいろなことを考える必要がありますが、ここでは上記のエラーを回避する簡単な方法をご紹介しておきます。
引数に拡張子を指定しない方法です。
ActiveWorkbook.SaveAs "c:\tmp\SAMP"
Workbooks(1).SaveAs "c:\tmp\SAMP"
以上のような引数指定ならば、ActiveWorkbookやWorkbooks(1)と同じ形式で保存されます。
勿論この仕様でイイのかどうかは、よく考えてみてください。
最終更新日時:2019-05-17 15:32
Home » いちばんやさしいExcel VBAの教本 » Workbook.SaveAsの実行時エラー