Excel ユーザー定義用紙の印刷設定 問題解決のVBAコード

vbaprintusereyecatch01

エクセルVBAで行うプリント実行は、個別の環境次第でエラーやトラブルに成り易いものです。
ユーザー設定の用紙などは特に設定方法が環境依存的です。

問題解決します。

こんにちは、じゅんぱ店長(@junpa33)です。

エクセルVBAで印刷設定をする時には用紙サイズを指定します。

「A4」「A3」「A5」「B4」「B5」などメジャーな用紙サイズは、すでに設定値が割り振られているので、簡単に設定することが出来ます。

けれどもそれは、一般的なサイズの用紙の場合です。

プリンタードライバにあらかじめ設定されている用紙サイズ以外はどうするのか。突然、難易度MAXになります。

今回のテーマは、エクセルVBAでの印刷コード作成に必要な、ユーザー定義用紙の設定方法についてです。

「な~んだ これだけ?!」と思うほど簡単です。

(きっと、ググッて記事あさりした時間がもったいなかったと思うでしょう。)

ホントに? こっちはどれだけ悩んでると思っているんだ!

ねこ氏

うささん

まあまあ とりあえず、聞くだけ聞いてみましょうか。

エクセルVBA 印刷用紙設定の方法

まずは、おさらいの意味で、印刷用紙設定の記述方法を確認しておきます。

用紙サイズ構文
  • Worksheetオブジェクト.PageSetup.PaperSize = 定数

定数は、A4用紙であれば「xlPaperA4」とか、B5用紙であれば「xlPaperB5」とかになります。

印刷の向きについては、次のように記述します。

印刷の向き構文
  • Worksheetオブジェクト.PageSetup.Orientation = 定数

定数は、横向き「xlLandscape」、タテ向き「xlPortrait」になります。

ここまでは問題ないと思います。

ユーザー定義用紙のVBAでの設定方法

ユーザー定義用紙の設定で、まず最初にハマるのが、ユーザー設定「xlPaperUser」です。

ダメ見本コード
  • Worksheetオブジェクト.PageSetup.PaperSize = xlPaperUser

これを記述していると、「一青窈のハナミズキ」の様に「♪ダメさが100年続きます♬」です。

ユーザー定義用紙のVBAでの本当の設定方法は、実はこの手順で設定すればバッチリOKです。

実は本当の設定方法は、

プリンターに自分が利用したいサイズの用紙を登録する

使用するプリンターのプロパティの中に「ユーザー定義用紙」を設定する項目があるので、使用したいサイズを登録する。

このブログ記事では、よくA6用紙(A4用紙の1/4サイズ)を使いますが、大体の場合、デフォルトではプリンターには用紙サイズがセットされていません。なので、自分的にはユーザー定義で登録をしています。

エクセルをマクロ使用モードで立ち上げる

新規BOOKで良いので、「Book1(.xlsm)」を立ち上げます。

リボンの開発タブからVisual VasicでVBE(ビジュアルベイシックエディタ)を開いてください。

さらに挿入からモジュールウインドウを開いてください。

開いたModuleに下記のコードをコピペします
Sub 印刷設定用紙定数値()
    Dim TV As Integer
        ActiveWorkbook.Activate
        With ActiveSheet
            .Select
            TV = .PageSetup.PaperSize
        End With
        MsgBox "用紙設定 定数値は 「 " & TV & " 」 です。", vbOKOnly, "メッセージ"
End Sub

プリンターに登録したユーザー定義用紙の定数値を確認します

エクセルシートで、「ファイル」タブ→印刷 印刷設定ウインドウで用紙設定を登録した用紙名(ユーサー定義した用紙)にセットします。

印刷は実行せずにエクセルシートに戻り、

次に、Moduleにコピペしたコード(印刷設定用紙定数値プロシージャー)を実行します。

すると、例えば、メッセージボックスに

のように表示されます。

(この場合の「70」はある特定の個別環境でのA6用紙のVBA用紙設定の定数値です。)

仕上げ

それぞれで、メッセージボックスに表示された「定数値」を

Worksheetオブジェクト.PageSetup.PaperSize = 定数

としてVBAコードに設置することで設定完了です。

「定数値」はそれぞれの用紙サイズごとに1つずつ設定されていますので、ユーザー定義用紙サイズの登録を増やすごとに一回ずつ確認してください

また、プリンターが違えば定数値も変わりますし、登録の順番も違えば定数値も変わると思ってください。

ユーザー定義用紙のVBAコードへの登録 問題解決のまとめ

このブログではA6用紙を頻繁に使う内容での記事が少なからずあります。

A6用紙への印刷をVBAでやらせる場合は、このように「定数値を導き出して」コードに埋め込む必要が出てきます。

に対して、

プリントプレビューまでで、VBAプログラムを終了し、印刷についてはエクセルのプレビュー画面から行うようにすれば、VBAとは関係が無くなります。

その場合はプリンター側でユーザー定義用紙を選択すればいいだけになります。

  • VBAコード実行でシームレスに印刷
  • VBAコードではPrintPreviewまで、確認をしてから印刷

どちらのスタイルが業務的に利用者に合っているかは別レベルの問題として考える必要があるかもしれません。

エクセルVBAの独習には動画学習という方法もあります。 目と耳両方を使って学習することでさらに勉強効率を上げることもできます。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。