こんにちは。
先日の続き、知人からのExcel vs. 印刷系SOSの際、友達の印刷環境を調べようと思い、この件も調べたので備忘録しておきます。
1. 動作環境
OS: Windows 8.1
Excel: 2013
Printer: EPSON EP-704A(解像度の取得は、CubePDFで試しました…)
2. 背景
ExcelのVBAでは、印刷設定の参照/設定を行う仕組みとしてPageSetupクラスが提供されていますが、プリンターの性能を知らない ⇒ 設定「可能」な値を知らない ⇒ 性能範囲外の値を設定しようものなら途端にエラー発生…なため、まずはプリンターの性能(機能)を知る必要があります。
ここで登場するのかWin API「DeviceCapabilities」です。
今更Win API?と言われそうですが、動きも安定してるので、紹介しておきます。
3. 定義方法
こんな感じです。
あ、64bit環境で試される場合は、定義方法ご注意ください。^^
今回は、指定可能な解像度を調べようと思います。
4. 解像度の取得
①プリンター名の取得
Application.ActivePrinterで取得できます。
が、ポート番号とかへっついてきますので、DeviceCapabilitiesで使う際には、文字整形が必要になります。。。
②サポートされている解像度の個数を取得
lpOutput へ空っぽを渡すことで、サポートされている解像度の個数(必要なバッファ)を知ることができます。
※見慣れない関数について補足しておきます。(何れも自前関数です)
getActivePrinter: カレントのプリンター名を取得(ポート番号とか排除した整形後の文字列)
③サポートされている解像度の取得
②で取得した lngReturnValue(水平解像度 x 垂直解像度の組み合わせを1とした全個数)を元に lpOutput 用のバッファを確保します。
④実行結果
まとめ
いかがでしたでしょうか?
このWin APIを使いこなすと、印刷環境条件の大概のことは知ることができます。^^
DeviceCapabilitiesで許容範囲を調べてから、PageSetupクラスで環境設定…というコンボで、他人の環境でも不安なく印刷操作が出来そうです!
次回以降も、苦労した点を備忘録しようと思います。
Comments