VBAからの印刷では、プリンタや部数を指定して印刷できます。
出力プリンタや部数をマクロボタンに指定しておけば、印刷ごとにいちいち出力プリンタを切り替える必要がありません。
いつもカラーで印刷するシートと、白黒で印刷するシートなど、あらかじめプリンタを指定したボタンをシートに設置しておくと便利でしょう。
印刷コードはプリンタ名や部数を必要に応じて指定するだけなので、実質1行のごく簡単なものです。
プリンタリストを取得できるコードもおまけで付けておきます。
サンプルファイル
必要に応じてサンプルファイルをダウンロードしてください。
ユーザーフォームを使ったプリンターリストの取得などは見ていただくのが一番良いと思います。
記述例
PrintOutメソッドにはたくさんの引数がありますが、今回は出力プリンタと部数の指定方法に絞って紹介します。
その他の引数はMicrosoftの公式ページをご参考ください。
https://learn.microsoft.com/ja-jp/office/vba/api/excel.worksheet.printout
出力プリンター指定
ActiveSheet.PrintOut ActivePrinter:="Microsoft Print to PDF"
このようにActivePrinter:=”Microsoft Print to PDF”を付けるだけです。“Microsoft Print to PDF”の部分は実際に出力したいプリンターの名前に変更してください。
少しめんどうですがプリンター名はコントロールパネルのデバイスとプリンターから確認できます。(後ほど紹介するコードで一覧を取得できます。)
コントロールパネルから開くのがめんどうな方は、Control Printersをコマンドプロンプトやエクスプローラーのパス欄に貼り付ければ表示できます。
このように「プリンターのプロパティ」からプリンター名をコピーすることができます。
部数指定
ActiveSheet.PrintOut Copies:=2
このようにCopies:=2を付けるだけです。
省略した場合は「1」扱いになるので1部印刷するだけなら記述する必要はありません。
出力プリンターと部数の指定
ActiveSheet.PrintOut ActivePrinter:="Microsoft Print to PDF", Copies:=2
出力プリンターと部数を一緒に指定する場合はカンマで区切って続けて記述します。
今回、紹介していない引数もカンマ区切りで続けて指定できます。印刷ページの範囲指定などは使用することがあるかもしれませんね。
プリンターリスト取得コード
デバイスとプリンターからプリンター名を確認(コピー)する方法を紹介しましたが、もう少し便利にするためにプリンターリストの取得コードを紹介します。
取得したプリンターリストを活用した印刷コードなど、具体的な使用例はサンプルファイルをダウンロードしてご覧ください。
シート利用版
Sheet1のA1セルから下方向へ、実行端末で使用可能なプリンターリストを作成します。
Sub プリンターリスト作成()
'A1セルを起点にプリンターリストを作成
With Sheet1
'既存リストクリア
Dim Er1 As Long
Er1 = .Cells(Rows.Count, "A").End(xlUp).Row
.Range(.Cells(1, "A"), .Cells(Er1, "A")).ClearContents
'操作端末で使用可能なプリンターリスト作成
Dim i1 As Long, Printer, ShellApp As Object
Set ShellApp = CreateObject("Shell.Application")
For Each Printer In ShellApp.Namespace(4).Items
i1 = i1 + 1
.Cells(i1, "A") = Printer.Name
Next
Set ShellApp = Nothing
End With
End Sub
Excel起動時に常に実行する場合はThisWorkBookモジュールへ次のように指定します。
Private Sub Workbook_Open()
Call プリンターリスト作成
End Sub
フォーム利用版
画像のサンプルフォームを例に紹介します。(プリンターリストを取得するコンボボックス名は「cboPrinter」という名前にしています。)
サンプルファイルでご確認いただくとわかりやすいと思います。
Private Sub UserForm_Initialize()
'初期化(プリンターリスト等作成)
'操作端末で使用可能なプリンターリスト作成
Dim Printer, ShellApp As Object
Set ShellApp = CreateObject("Shell.Application")
cboPrinter.Clear
For Each Printer In ShellApp.Namespace(4).Items
cboPrinter.AddItem Printer.Name
Next
Set ShellApp = Nothing
'最初のリストを表示
cboPrinter.ListIndex = 0
End Sub
フォームを起動すると、次のように実行端末で使用可能なプリンターリストが取得できていると思います。
まとめ
プリンターリストの取得後、そこから印刷する仕組みなどはサンプルファイルをご覧ください。
事務業務ではほんの些細な効率化が意外と大きな効果を生んだりします。
印刷など頻度の多い作業はチリツモです。1アクションでも減らして生産性を高めましょう。
コメント