top of page
検索

ExcelでVBA、プリンターの機能を取得する

こんにちは。

先日の続き、知人からの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クラスで環境設定…というコンボで、他人の環境でも不安なく印刷操作が出来そうです!

次回以降も、苦労した点を備忘録しようと思います。

閲覧数:1,256回0件のコメント

Comments


bottom of page