プリンタの数を返すFunction

プリンタの数を調べるFunction

Application.ActivePrinterにプリンタ名をセットしたくても、プリンタ名の後ろにくっついている「on NeXX:」の部分がわからないとセットできない。

同じプリンタに接続していても、端末ごとに「NeXX:」の部分が異なるので困ることになる。

そこで、「XX」の部分を「00」からインクリメントしてプリンタ名にヒットするかどうか確認することを考えた。

そのためには、ループ回数を決めるためにインストールされているプリンタの数を取得しないといけない。

プリンタの数自体は、

akashi-keirin.hatenablog.com

このときのように、Shell.Applicationオブジェクトを取得したら簡単に取得できるので、Shell.Applicationオブジェクトをラップしたメソッドを作った。

コード

前回

akashi-keirin.hatenablog.com

isExsistPrinterメソッドとともに、クラスモジュールに書いた。オブジェクト名は「InstalledPrinter」とし、PredeclaredIdTrueにして、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]をズドン!

f:id:akashi_keirin:20180929184456j:plain

6」が返った。

コントロール・パネルからプリンタの数を見てみると、

f:id:akashi_keirin:20180929184511j:plain

ご名算!

おわりに

ひとまず今回はここまで。