印刷開始と終了と枚数をセルの値にリンクさせる

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

印刷する時にセルに計算された数字を反映して印刷枚数を自動的に取得たいと思いませんか

例えば、参加人数の合計が20人となっているセルの値を取得して、ユーザーフォームに配置したコマンドボタン(印刷ボタン)を押すと自動的に20枚印刷出来たら便利ですよね。

ついでに、印刷開始ページや印刷終了ページも同じくセルの値から取得できれば、いろいろ応用ができますよね。

スポンサーリンク

From・toなど数字をセル番地に指定

まずは基本の印刷をのVBAコードですが、現在表示中のシートで1ページ目~2ページ目を1枚印刷するVBAコードはこのように書きますよね。

表示中のシートを印刷するVBAコード

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut FROM:=1, To:=2, COPIES:=1, COLLATE:=True
End Sub

これで印刷できますが、もしお使いのプリンターが両面印刷対応機種ならば、プリンターの設定により1枚の紙に両面印刷できますが、そうでない場合は2枚出ますよね。

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

残念ながらVBAではプリンターの両面印刷を指定することはできませんので、ダイアログを表示させるVBAコードで設定できるようにしましょう。

それではやりたいセルの値で印刷開始ページ・印刷終了ページ・印刷枚数を取得して印刷できるようにする方法です。

結論は、FROM,TO,COPIESの数字をセル番地にするだけです。

  • 印刷開始ページ「1」をシート名「sheet1」のセル「A1」から取得
  • 印刷終了ページ「2」をシート名「sheet1」のセル「B1」から取得
  • 印刷枚数を「1」をシート名「sheet」のセル「C1」から取得

先ほどのVBAコードの例を参考に数字をセル番地に変えたVBAコードが下記の通りです。

印刷引数をセル番地に変更したVBAコード

Private Sub CommandButton1_Click()
ActiveWindow.SelectedSheets.PrintOut FROM:=Sheets(“sheet1”).Range(“A1”).Value, To:=Sheets(“sheet1”).Range(“B1”).Value, COPIES:=Sheets(“sheet1”).Range(“C1”).Value, COLLATE:=True
End Sub

これで、印刷開始・印刷終了・印刷ページ数をセルの値から取得して印刷して使っています。

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

このままでも目的の印刷ができるのですが、誤ってコマンドボタンを押してしまうと印刷が始まってしまうので、誤操作防止のために「印刷しますか?」ってメッセージを表示させた方が紙の無駄が無くなるので安心です。

メッセージを追加して印刷ページをセルから取得

Private Sub CommandButton1_Click()
msg = MsgBox(“印刷実行しますか?”, Buttons:=vbYesNo + vbExclamation)
If msg = vbYes Then
ActiveWindow.SelectedSheets.PrintOut FROM:=Sheets(“sheet1”).Range(“A1”).Value, To:=Sheets(“sheet1”).Range(“B1”).Value, COPIES:=Sheets(“sheet1”).Range(“C1”).Value, COLLATE:=True
Else
MsgBox “印刷を中止しました”
End If
End Sub

これで、コマンドボタンが押されたらメッセージで「印刷しますか?」とメッセージが表示されます。

「はい」を選択すると印刷が始まり「いいえ」を選択すると「印刷を中止しました」と再度メッセージが表示されるようになり、誤って印刷してしまう事が無くなるので、印刷ボタンを作ったらこのようにエラー防止するVBAコードを付けた方が安心ですね。

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

今回は印刷開始ページ・印刷終了ページ・印刷枚数をセルの値から取得する方法を書きましたが、印刷枚数だけテキストボックスを利用する方法が実際多いですよ。

印刷関連VBA
タイトルとURLをコピーしました