印刷したい枚数を自由に指定して印刷しできたらもっと便利になりませんか?
アイキャッチ画像(上の図)のように、印刷したい枚数をテキストボックスに入力して印刷実行ボタンをクリックすると印刷完了できる印刷フォームを作ってみましょう。
印刷ページ・枚数が決まっている場合
まずは基本的なExcel-VBAを使用した印刷方法を押さえておきましょう。
ここでは、印刷ページも枚数も決まっているので変更の必要がない場合の例になります。
ワークシートをExcel-VBAを使用して印刷するにはPrintOutメソッドを使い、現在表示中のワークシートであらかじめ設定した印刷範囲を1枚印刷するコードを書いてみましょう。
このようになり、ActiveWindow.SelectedSheets.PrintOutで表示中のシートを印刷すると指示するVBAコードになります。
そして、ページ数や枚数を下記のように指定できます。
- From・・・開始ページ
- To・・・・終了ページ
- Copies・・印刷部数(印刷枚数)
- Collate・・部単位指定(True)※省略すると1部印刷に指定
ちなみに、ここでは表示しているワークシートとしていますが、別のシート(表示していないシート)を指定して印刷することもできます。
この場合、「ActiveWindow.SelectedSheets」の部分を「Worksheets(“Sheet1”).Activate」に変更すると、Sheet1を指定して印刷できます。
印刷枚数を自由に指定して印刷
これで基本的なExcel-VBAでの印刷はできるようになりましたが、上記VBAコードでは印刷枚数を指定している(Copies:=1)ので、常に1枚しか印刷されません。
このページでやりたいことは、印刷枚数を自由に設定させることなので(Copies:=1)を簡単に変更できるようにさせる印刷フォームが必要になります。
上記画像が実際に作って使用している印刷フォームで、テキストボックスに印刷したい枚数を入力して印刷実行ボタンを押せば、入力した枚数分印刷ができます。
これにより(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枚までにします。
ここでは3枚でVBAコード書くのをやめましたが、10枚まで書き続けるならばCase Is =4以降を続ければ完了します。
これでも問題ないのですが、万が一テキストボックスが空欄の時に印刷実行ボタン押されるとエラーになってしまうので、エラー回避の為に空欄の時はメッセージを出してお知らせしましょう。
Ifステートメント追加してエラー回避
最初にIf~Thenを追加して、メッセージを入れ、正しく入力されていたらElse以下の処理を開始します。
いかがでしたか?難しくないですよね。
If~Then~Else~End Ifにメッセージついてもここでは省略します。