2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Excelマクロでプリンタのプロパティを変更するには

Last updated at Posted at 2020-01-20

オフィスで使われるプリンタは、ランニングコスト削減を理由に、白黒印刷がデフォルトに設定されていることが多い。(白黒とカラーでは料金がざっくり言って10倍違うので)
Excelマクロ(VBA)を使って、白黒印刷がデフォルトのプリンタでカラー印刷できるか?と後輩君に聞かれたので、ちょっと調べてみた。

なお、カラー印刷がデフォルトのプリンタに白黒で印刷したいなら、Excelのページ設定にあるので、当然マクロから制御可能だ。
image.png

object.PageSetup.BlackAndWhite = True

という具合。でもこれってExcel側で色を落としているだけなので、カウンター料金の契約だとしっかりカラー単価で請求されそうな気がするのだが実際どうなのだろう・・・?

方法

やり方は色々あるので、ひとつずつ解説していこう。

なお、プリンタのプロパティが変更できないポリシー設定の現場では、当たり前だが、以下に述べる方法は実現できない。システム管理者に相談しよう。

WindowsAPI を使う方法

Win32APIを使ってプリンタドライバの情報をDEVMODE構造体で取得し、dmColorDMCOLOR_COLORdmFieldsDM_COLORをセットする方法。
でも、今どきVBAからWin32APIを直で叩くのは時代錯誤も甚だしいし、コード量が増えて面倒くさいだけなので試してもいない。

PowerShell の Set-PrintConfiguration を使う方法

かつてWin32APIに頼っていた機能の殆どはWMIに抽象化され簡単に実現できるようになった。そしてWMIはWSHというスクリプト言語で扱うことが多かったが、今のWindowsスクリプティング環境は、より洗練されたPowerShellへと移行している。PowerShellからWMIのWin32_PrinterWin32_PrinterConfigurationクラスを呼び出すとプリンタのプロパティを変更できそうだが、PowerShellのSet-PrintConfigurationコマンドレットなら、さらにシンプルに書けそうなので、そちらを試してみた。

VBAからPowerShellのコードを実行するにはWScript.Shellを経由する。

CreateObject("WScript.Shell").Run "PowerShell -ExecutionPolicy RemoteSigned -Command Set-PrintConfiguration -PrinterName 'プリンタ名' -Color $True", 0

一応、期待する動きになったが、マクロウイルスと判定されてしまった。
マイクロソフトサポートサイトの手順に沿って、信頼できる場所から起動しなければならない。

SendKeysメソッドを使う方法

逃げ道として大概でてくるSendKeysメソッド。
プリンタのプロパティ画面を表示してユーザに変えてもらう方法。運用負担軽減策としてはアリ。

SendKeys "%R"
Application.Dialogs(xlDialogPrint).Show

Office2007以降ならCommandBarsオブジェクトでも可。

Application.CommandBars.ExecuteMso "PrintPreviewAndPrint"

【本命】カラー印刷用のプリンタを追加する方法

最後に本命を載せる。
同じプリンタドライバで、カラー印刷用のプリンタを【Windowsの設定】から追加し、

object.PrintOut ActivePrinter:="プリンタ名"

とする方法。これが素直かつ、もっとも問題が起こりにくい簡単なやり方だろう。

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?