VBAで印刷枚数を指定して印刷する方法

printout印刷
セルの値を取得して印刷開始・終了・ページ数自動反映

ボタン1回押すだけで印刷出来たら便利だと思いませんか

さらに印刷したい枚数を自由に指定して印刷しできたらもっと便利になりませんか

ここではユーザーフォームに配置したテキストボックスに、印刷したい枚数を入力してコマンドボタンを押すと指定した枚数の印刷ができるような印刷フォームを作ってみましょう。

スポンサーリンク

印刷ページ・枚数が決まっている場合

まずは基本的なExcel-VBAを使用した印刷方法を押さえておきましょう。

ここでは、印刷ページも枚数も決まっているので変更の必要がない場合の例になります。

ワークシートをExcel-VBAを使用して印刷するにはPrintOutメソッドを使い、現在表示中のワークシートであらかじめ設定した印刷範囲を1枚印刷するコードを書いてみましょう。

1ページ目1枚印刷するVBAコード

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub

VBA解説
  1. コマンドボタン1が押されたら
  2. 表示中のシートを1ページ目~1ページ目、1枚、部単位で印刷する
  3. マクロ終了

このようになり、ActiveWindow.SelectedSheets.PrintOutで表示中のシートを印刷すると指示するVBAコードになります。

そして、ページ数や枚数を下記のように指定できます。

  • From・・・開始ページ
  • To・・・・終了ページ
  • Copies・・印刷部数(印刷枚数)
  • Collate・・部単位指定(True)※省略すると1部印刷に指定

ちなみに、ここでは表示しているワークシートとしていますが、別のシート(表示していないシート)を指定して印刷することもできます。

この場合、「ActiveWindow.SelectedSheets」の部分を「Worksheets(“Sheet1”).Activate」に変更すると、Sheet1を指定して印刷できます。

スポンサーリンク

印刷枚数を自由に指定して印刷

これで基本的なExcel-VBAでの印刷はできるようになりましたが、コードに印刷枚数を指定している(Copies:=1)ので、常に設定した枚数しか印刷されません。

印刷するたびに枚数が異なる時などは、この(Copies:=1)を簡単に変更できると便利なのです。

そこで次に、印刷枚数はある程度決まってるけど、実際に印刷枚数はその都度指定して印刷することが多いので、ユーザーフォームで印刷フォームを作って使っています。

印刷print

印刷フォーム

これが実際に使っている印刷フォームで、テキストボックスに印刷したい枚数を入力して印刷実行ボタンを押せば印刷完了です。

もしテキストボックスがなかったら、1回押せば1枚印刷なので、10枚必要ならば10回押せばいいのですが、面倒ですよね。

それでは実際に、ユーザーフォームを使いテキストボックスに入力された数字(枚数)を読み込んで、コマンドボタンで印刷を実行するようにしましょう。

必要なVBAコードは1枚の時、2枚の時・・・・10枚の時ですよね。

そのまま並べたら、こうなります。

  • 1枚の時「From:=1, To:=1, Copies:=1, Collate:=True」
  • 2枚の時「From:=1, To:=1, Copies:=2, Collate:=True」
  • 3枚の時「From:=1, To:=1, Copies:=3, Collate:=True」
  • 省略(4枚~9枚の時)
  • 10枚の時「From:=1, To:=1, Copies:=10, Collate:=True」

特に難しくないですよね。

このようにテキストボックスに入る数字(印刷枚数)が複数あります(1~10)ので、複数の条件で答えが出るまで順に処理を繰り返して行ってくれる「Select Caseステートメント」を使います。

Select Caseステートメントの詳細につきましては重複するので、詳しい事は下記をご覧ください。

では、シンプルにテキストボックスの数字が1だったら1枚印刷、2だったら2枚印刷・・・10だったら10枚印刷とVBAコードを書いていきたいのですが、長くなるので、3枚までにします。

Select Caseで印刷枚数指定するVBAコード

Private Sub CommandButton1_Click()
Select Case TextBox1
Case Is = 1
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Case Is = 2
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=2, Collate:=True
Case Is = 3
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=3, Collate:=True
End Select
End If
End Sub

ここでは3枚でVBAコード書くのをやめましたが、10枚まで書き続けるならばCase Is =4以降を続ければ完了します。

<span class="fz-12px">とりっぷぼうる</span>
とりっぷぼうる

これでも問題ないのですが、万が一テキストボックスが空欄の時に印刷実行ボタン押されるとエラーになってしまうので、空欄の時はメッセージを出してお知らせしましょう。

テキストボックス空欄の時の対応

Private Sub CommandButton1_Click()
If TextBox1.Value = “” Then
MsgBox “印刷枚数を入力してください”
Else
Select Case TextBox1
Case Is = 1
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Case Is = 2
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=2, Collate:=True
Case Is = 3
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=3, Collate:=True
End Select
End If
End Sub

最初にIf~Thenを追加して、メッセージを入れ、正しく入力されていたらElse以下の処理を開始します。

いかがでしたか?難しくないですよね。

If~Then~Else~End Ifにメッセージついてもここでは省略します。

印刷をする前にプリンターの設定状態を確認したい時は、この1行でプリンターダイアログを表示します。

タイトルとURLをコピーしました