印刷枚数入力テキストボックス付きVBA印刷フォームを作る

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

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

アイキャッチ画像(上の図)のように、印刷したい枚数をテキストボックスに入力して印刷実行ボタンをクリックすると印刷完了できる印刷フォームを作ってみましょう。

スポンサーリンク

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

まずは基本的な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での印刷はできるようになりましたが、上記VBAコードでは印刷枚数を指定している(Copies:=1)ので、常に1枚しか印刷されません。

このページでやりたいことは、印刷枚数を自由に設定させることなので(Copies:=1)を簡単に変更できるようにさせる印刷フォームが必要になります。

印刷print
印刷フォーム

上記画像が実際に作って使用している印刷フォームで、テキストボックスに印刷したい枚数を入力して印刷実行ボタンを押せば、入力した枚数分印刷ができます。

これにより(Copies:=1)のままならば、10枚印刷したい場合は10回印刷ボタンを押さなければならないのですが、この印刷フォームを使えば1回で済みます。

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

必要な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」

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

Select Caseステートメント

このようにテキストボックスに入る数字(印刷枚数)が複数(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 Sub

VBA解説
  1. コマンドボタン1がクリックされたら
  2. Select Caseステートメントを実行し、テキストボックス1の値が下記の時処理を行う
  3. 1だったら
  4. 現在表示選択中のシートを1ページ目~1ページ目を1枚印刷する
  5. 2だったら
  6. 現在表示選択中のシートを1ページ目~1ページ目を2枚印刷する
  7. 3だったら
  8. 現在表示選択中のシートを1ページ目~1ページ目を3枚印刷する
  9. Select Caseステートメント終了
  10. マクロ記録終了

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

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

Ifステートメント追加してエラー回避

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

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にメッセージついてもここでは省略します。

印刷関連VBA