こんにちは!今回の記事は、VBAマクロの印刷順番制御を行うサンプルマクロの紹介です。
VBAマクロにて、シートを印刷(シートごとに1回1回PrintOutを実行)すると…
という事が起こりました。この印刷順番をちゃんと順番通りに制御できないか?とマクロを作成してみましたので、紹介します。それでは、いってみましょう!
シート名を配列に格納してまとめて印刷するサンプルマクロ
配列にシート名を格納して、配列に対して一括で印刷処理を行うサンプルマクロを紹介します。
5つのシートをWorksheet(1)からWorksheet(5)まで順に配列に名前を入れて、配列を一括プリントアウトします。シートインデックス番号の順に印刷しています。
Sub printTest()
' 変数定義
Dim SheetAry As Variant
Dim i, j As Integer
' 配列と変数の初期化
ReDim SheetAry(0)
j = 0
' シート1からシート5までシート名を配列に格納する
For i = 1 To 5
ReDim Preserve SheetAry(j)
SheetAry(j) = Worksheets(i).Name
j = j + 1
Next
' 配列に格納したシートの印刷
Sheets(SheetAry).PrintOut
End Sub
シート名が決め打ちであるのならば、シート名をArrayに格納しても良いですね。
何度もPrintOutすると、印刷順はプリンタ側のジョブお任せになっているような動きだったので、配列に入れて渡すことで、配列順に印刷されるようになりました。(なので、配列の入れ方を工夫することで順番通りになるのかな、と思います。)
その他:待機時間を設けて印刷するサンプルマクロ(不確実ではある)
マクロの印刷(PrintOutの処理)と印刷の間に待機時間を設けることで、順番通りにできないかも試してみました。
確実ではないですが、”なるべく”印刷処理した順に印刷することができました。(ただ、シートやプリンタの処理の仕方によっては思った通りの順番ででてこないこともあるのかな、と思います。)
配列にシート名を格納するよりコード数は少ないかと思います。
Sub testPrint()
' シート1からシート5まで印刷する
For i = 1 To 5
Sheets(i).PrintOut
Sleep 3000
Next
End Sub
Sleepの部分が待機時間。ミリ秒での指定なので、サンプルマクロではprintOut処理してから、一度3秒待機することになります。ここの秒数は調整いただければよいかと思います。
さいごに
いかがだったでしょうか。同じような疑問を持たれている方の参考になれば幸いです。それでは、また!