プリンタの数を調べる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」が返った。
コントロール・パネルからプリンタの数を見てみると、

ご名算!
おわりに
ひとまず今回はここまで。