ワークシートの印刷設定を変更するExcelVBAコード

スポンサーリンク

配布資料には印刷設定をしておくことが多い

私自身は紙でファイルを使う機会が少ないのですが、紙の文化が根強く残る業態のため取引先に送る資料には印刷設定をしておくことが多いです。

たくさんのファイルのたくさんのページに対して印刷設定をするのが面倒なのでExcelVBAで実行できる方法を調べてみました。

今回は印刷設定の機能のうち、私がよく使用するプロパティの部分をご紹介します。

私が印刷設定で必要なこと

私が印刷範囲を設定する際に必要な項目は下記の通りです。

  • ①印刷範囲の設定
  • ②改ページ位置の変更(解除と設定)
  • ③上下左右の余白の設定
  • ④タイトル行の設定
  • ⑤印刷の向き
  • ⑥ページ数の設定(縦何ページ×横何ページに設定するか)
  • 他にも設定できるものはたくさんありますが、とりあえずこれだけ抑えていれば私の普段使いには十分です。

    スポンサーリンク

    印刷設定を行うExcelVBAのサンプルコード

    今回私が作成したExcelVBAコードは下記の通りです。

    50行に1回改ページを入れる設定にしています。
    数字を変更すると他の設定も可能です。

    Sub 印刷設定()

    ’印刷範囲の設定はA1形式なのでAddressを使う
    ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(Rows.Count, 6).End(xlUp)).Address

    ’改ページをすべて削除
    ActiveSheet.ResetAllPageBreaks

    Dim i As Long
    ’50行に1回改ページを追加
    For i = 2 To Cells(Rows.Count, 6).End(xlUp).Row
    If i Mod 50 = 0 Then
    ActiveSheet.HPageBreaks.Add before:=Cells(i + 1, 1)
    End If
    Next i

    With ActiveSheet.PageSetup

    .LeftMargin = Application.InchesToPoints(0) ’左の余白
    .RightMargin = Application.InchesToPoints(0) ’右の余白
    .TopMargin = Application.InchesToPoints(0) ’上の余白
    .BottomMargin = Application.InchesToPoints(0) ’下の余白

    .Orientation = xlPortrait ’縦向き
    ’.Orientation = xlLandscape ’横向き

    .PaperSize = xlPaperA4 ’A4サイズで印刷
    .Order = xlDownThenOver ’印刷の順序(今回は列側を1ページにしているので関係なし)

    .PrintTitleRows = “$1:$1” ’行のタイトル設定

    .Zoom = False’用紙に合わせて拡大縮小をする場合Falseを指定
    .FitToPagesWide = 1 ’列側のページ数
    .FitToPagesTall = False ’行のページ指定(指定しない場合、Falseを記入)

    End With

    End Sub

    印刷設定を行うVBAコードのトラブル?エラーについて

    印刷設定にはPrintCommunicationというプロパティがあり、これはプリンタとの通信を規定するものになります。

    印刷設定を行う前に「Application.PrintCommunication = False」と記載しておいて、プリンタとの接続を切ってから印刷設定をし、最後に「Application.PrintCommunication = True」として印刷設定を戻すことで、処理が高速化されるとよく紹介されています。

    私の普段業務を行っている環境で、このPrintCommunicationの設定をコードに入れていると、1つのファイルに印刷設定の処理をしているときは問題なかったのですが、フォルダの中に含まれているファイルにすべて印刷設定を行ったりするコードを記載すると印刷設定が反映されないトラブルがありました。

    原因は特定できていませんが、PrintCommunicationのコードを削除することできちんと動作するようになりましたので、PrintCommunicationが影響しているのは間違いなさそうです。

    今回の印刷設定のVBAコードはそもそも高速化が必要な処理ではないため、当面このコードについては使わないようにしていきたいと思います。

    コメント