ボタン1回押すだけで印刷出来たら便利だと思いませんか?
さらに印刷したい枚数を自由に指定して印刷しできたらもっと便利になりませんか?
ここではユーザーフォームに配置したテキストボックスに、印刷したい枚数を入力してコマンドボタンを押すと指定した枚数の印刷ができるような印刷フォームを作ってみましょう。
印刷ページ・枚数が決まっている場合
まずは基本的なExcel-VBAを使用した印刷方法を押さえておきましょう。
ここでは、印刷ページも枚数も決まっているので変更の必要がない場合の例になります。
ワークシートをExcel-VBAを使用して印刷するにはPrintOutメソッドを使い、現在表示中のワークシートであらかじめ設定した印刷範囲を1枚印刷するコードを書いてみましょう。
Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End Sub
- コマンドボタン1が押されたら
- 表示中のシートを1ページ目~1ページ目、1枚、部単位で印刷する
- マクロ終了
このようになり、ActiveWindow.SelectedSheets.PrintOutで表示中のシートを印刷すると指示するVBAコードになります。
そして、ページ数や枚数を下記のように指定できます。
- From・・・開始ページ
- To・・・・終了ページ
- Copies・・印刷部数(印刷枚数)
- Collate・・部単位指定(True)※省略すると1部印刷に指定
ちなみに、ここでは表示しているワークシートとしていますが、別のシート(表示していないシート)を指定して印刷することもできます。
この場合、「ActiveWindow.SelectedSheets」の部分を「Worksheets(“Sheet1”).Activate」に変更すると、Sheet1を指定して印刷できます。
印刷枚数を自由に指定して印刷
これで基本的なExcel-VBAでの印刷はできるようになりましたが、コードに印刷枚数を指定している(Copies:=1)ので、常に設定した枚数しか印刷されません。
印刷するたびに枚数が異なる時などは、この(Copies:=1)を簡単に変更できると便利なのです。
そこで次に、印刷枚数はある程度決まってるけど、実際に印刷枚数はその都度指定して印刷することが多いので、ユーザーフォームで印刷フォームを作って使っています。
これが実際に使っている印刷フォームで、テキストボックスに印刷したい枚数を入力して印刷実行ボタンを押せば印刷完了です。
もしテキストボックスがなかったら、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枚までにします。
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以降を続ければ完了します。
スポンサーリンク
これでも問題ないのですが、万が一テキストボックスが空欄の時に印刷実行ボタン押されるとエラーになってしまうので、空欄の時はメッセージを出してお知らせしましょう。
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
- エクセルからエクセルへ差し込み印刷
- 印刷プレビュー
- 枚数指定して印刷実行
- セル番地の値を取得して開始・終了ページ設定
- プリンター選択・設定
- 印刷範囲指定・選択中範囲印刷
- 用紙の向きを指定する
- 用紙サイズを指定する
- 印刷倍率を指定する
- 印刷倍率を自動調整に設定して1ページ内に収めて印刷
- インク・トナー節約設定
- ページ設定で上下左右の余白を指定する
- ヘッダーとフッターを指定する
- フッターの開始ページ数指定と総ページ数表示
- ヘッダー2行表示や日時表示
- 数式エラーを自動的に空白にして印刷する
- 入力漏れがあったら印刷を自動停止する