即効テクニック |
ワークシートを印刷するにはPrintOutメソッドを使います。Sub Sample1() ActiveSheet.PrintOut End Sub印刷の操作をマクロ記録すると、Windowオブジェクトが記録されますが、PrintOutメソッドはワークシート(Worksheetオブジェクト)も持っています。 さて、印刷を実行する前に、印刷結果が何ページになるかを調べるにはどうしたらいいでしょう。 VBAには、水平方向の改ページを表すHPageBreakオブジェクトと、垂直方向の改ページを表すVPageBreakオブジェクトがありますが、印刷されるページ数を表すプロパティはありません。 改ページの個数から、印刷されるページ数を計算することもできますが、ちょっと、ややこしいです。ちなみに、次のようにします。Sub Sample2() Dim n As Long n = (ActiveSheet.HPageBreaks.Count + 1) * _ (ActiveSheet.VPageBreaks.Count + 1) MsgBox "全部で" & n & "ページです" End Subもっと簡単に調べることはできないのでしょうか。 印刷の総ページ数を直接調べることは、現在のVBAではできませんが、Excel 4.0時代の(VBAではない)マクロ言語では可能でした。 VBAからExcel 4.0マクロを使えば、一発で調べることができます。Sub Sample3() Dim n As Long n = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") MsgBox "全部で" & n & "ページです" End SubGET.DOCUMENTは、ファイルに関する情報を取得する命令で、書式はGET.DOCUMENT(検査の種類を表す番号,ファイル名)です。 [ファイル名]を省略すると、アクティブなブックやシートが対象になります。 アクティブシートでないSheet1のページ数を取得するには、ExecuteExcel4Macro("GET.DOCUMENT(50,""Sheet1"")")とします。シート名を指定するダブルコーテーションに留意してください。 GET.DOCUMENTで指定できる検査は、1から65までの65種類あります。 ほとんどの検査項目は、VBAにも対応するプロパティが用意されていますが、中には今回のようにVBAよりも便利に使えるケースもあります。