プリンタの数を返すFunction
プリンタの数を調べるFunction
Application.ActivePrinter
にプリンタ名をセットしたくても、プリンタ名の後ろにくっついている「on NeXX:
」の部分がわからないとセットできない。
同じプリンタに接続していても、端末ごとに「NeXX:
」の部分が異なるので困ることになる。
そこで、「XX
」の部分を「00
」からインクリメントしてプリンタ名にヒットするかどうか確認することを考えた。
そのためには、ループ回数を決めるためにインストールされているプリンタの数を取得しないといけない。
プリンタの数自体は、
このときのように、Shell.Application
オブジェクトを取得したら簡単に取得できるので、Shell.Application
オブジェクトをラップしたメソッドを作った。
コード
前回
のisExsistPrinter
メソッドとともに、クラスモジュールに書いた。オブジェクト名は「InstalledPrinter
」とし、PredeclaredId
をTrue
にして、Singleton的に運用することにした。
リスト1 クラスモジュール
Public Function getPrintersCount() As Long Dim shellApp As New Shell getPrintersCount = shellApp.Namespace(ssfPRINTERS).Items.Count Set shellApp = Nothing End Function
参照設定で「Microsoft Shell Controls And Automation」にチェックを入れているからなのか、「Microsoft Scripting Runtime」にチェックを入れているからなのか、CreateObject
を使わなくてもShell
オブジェクトをインスタンス化することができる。
あとは、NameSpace
メソッドでFolder
オブジェクトを取得し、Items.Count
プロパティでインストールされているプリンタの数が取得できる。
使ってみる
イミディエイト・ウインドウに、
?InstalledPrinter.getPrintersCount
と打ち込んで、[Enter]をズドン!
「6
」が返った。
コントロール・パネルからプリンタの数を見てみると、
ご名算!
おわりに
ひとまず今回はここまで。