2023/12/27

Notes - Excel 連携:#28)印刷の設定(拡大縮小 / 印刷範囲)

Notes から Excel を操作する方法について紹介する連載『Notes - Excel 連携』の 28 回目です。第 20 回から前回までは「帳票の作成」を行い、帳票としてのデザインは完成しました。今回から数回にわたって、帳票の印刷など出力に関してまとめます。


印刷の設定

前回できあがった帳票を印刷プレビューを表示すると、以下のように 1 ページに入りません。

Excel で印刷する際は「すべての列を 1 ページに印刷」の設定を行い紙のサイズに合わせて出力するのが一般的ですよね。このように Excel の印刷設定を VBA で操作するためには Worksheet オブジェクトの PageSetup プロパティ を使用します。

このプロパティから取得できるオブジェクト PageSetup の詳細は以下のリンクを確認ください。

PageSetup オブジェクト (Excel)


拡大・縮小

印刷の拡大・縮小の設定は 2 通りの方法があります。

1 つ目の方法は、単純に倍率を設定する Zoom プロパティの利用です。単位は%で 10 ~ 400 が設定できます。

PageSetup.Zoom プロパティ (Excel)

この設定でも用紙に合わせた出力は可能なのですが、列数が増えたり、項目幅を調整すると倍率も調整する必要があり非効率ですね。


2 つ目の方法が「すべての列を 1 ページに印刷」する設定のように用紙に合わせて、拡大・縮小する方法です。使用するプロパティは次の2つです。

PageSetup.FitToPagesWide プロパティ (Excel)

PageSetup.FitToPagesTall プロパティ (Excel)

それぞれ、シートのすべての列(または行)を何ページで出力するかを指定します。指定しない場合は False を設定することができます。

例えば、「すべての列を 1 ページに印刷」する場合は、次のようなコードとなります。すべての列を 1 ページに合わせる設定をし、縦は行数に合わせて印刷されるよう False を設定しています。

Function xPageSetup(voSheet As Variant)
   'すべての列を 1 ページに印刷
   voSheet.PageSetup.Zoom = False
   voSheet.PageSetup.FitToPagesWide = 1
   voSheet.PageSetup.FitToPagesTall = False
End Function

なお、この設定を使用する場合、Zoom プロパティに False を設定する必要があるので、注意してください。


印刷範囲の設定

今回作成した帳票の A 列は Excel での見た目を調整するためのマージンの役割でした。印刷する必要はありませんので、印刷範囲から除外します。

印刷範囲を設定するには、PrintArea プロパティ  を使用します。このプロパティには Range オブジェクトで範囲を指定する場合と同じ文字列を設定します。例えば、A 列を除外し B 列~ I 列を印刷範囲とする場合、"B:I" を設定します。

サンプルプログラムは次の通りです。

   '印刷範囲の設定
   voSheet.PageSetup.PrintArea = CCToAA(2, 9)

なお、上記処理では列の範囲を表す文字列を作成する関数をコールしています。この関数は次の通りで、スクリプトライブラリ lsXls に追加しておきます。

Public Function CCToAA(ByVal viColFm As Integer, ByVal viColTo As Integer) As String
   CCToAA = x9ToA(viColFm) & ":" & x9ToA(viColTo)
End Function


なお、今回作成した印刷設定を行う関数をメインプログラムに追加して実行します。

Sub Initialize
         ・・・
   '帳票ヘッダ
   Call xDrawHeader(oSheet)

   '印刷設定
   Call xPageSetup(oSheet)

   'Excel を UI に表示
   oXls.Visible = True
End Sub

出力された Excel シートを印刷プリビューすると、次のように用紙に合わせて印刷されるようになったことがわかります。


前回 Notes - Excel 連携 次回

0 件のコメント:

コメントを投稿