プリンタが存在するかどうかを判定するFunction
プリンタが存在するかを調べるFunction
軽量PDFを作成するためには、ExportAsFixedFormatメソッドを用いていたのでは限界があるので、
このときのように、プリンタにJUST PDFなどの、PDF出力用プリンタを選択する。
その場合、プリンタ名をApplication.ActivePrinterプロパティにプリンタ名をセットすることになる。
このとき、存在しないプリンタ名をセットしようとすると、当然ながらエラーが出る。
このことを利用して、プリンタが存在するかどうかを判定するFunctionを作成した。
コード
リスト1 標準モジュール
Public Function isExistPrinter( _
ByVal printerName As String) As Boolean
isExistPrinter = False
Dim tmp As String '……(1)'
tmp = Application.ActivePrinter
On Error Resume Next '……(2)'
Application.ActivePrinter = printerName
Application.ActivePrinter = tmp
If Err.Number > 0 Then Exit Function
On Error GoTo 0
isExistPrinter = True
End Function
まず(1)からの2行
Dim tmp As String tmp = Application.ActivePrinter
で、変数tmpにApplication.ActivePrinterプロパティの値を保持しておく。
次に(2)からの5行
On Error Resume Next Application.ActivePrinter = printerName Application.ActivePrinter = tmp If Err.Number > 0 Then Exit Function On Error GoTo 0
では、最初に
On Error Resume Next
でエラーが出ても無視するようにしておいて、
Application.ActivePrinter = printerName
で、引数として受け取ったprinterNameをApplication.ActivePrinterプロパティに突っ込んでみる。
printerNameが存在するプリンタ名なら、単にActivePrinterが切り替わるだけ。存在しないプリンタ名だとエラーが出る。On Error Resume Nextしているので、エラーが出ていたとしてもプログラムが停止することはないが、エラーが出ていればErr.Number > 0になっており、エラーが出ていなければErr.Number = 0のはずだ。
エラーが出るかどうかさえ分かれば良いので、この後即座に
Application.ActivePrinter = tmp
でActivePrinterを元通りにしておく。
もし、エラーが出ていたのであれば、
If Err.Number > 0 Then Exit Function
のところでreturn。
最初にisExistPrinterをFalseにしてあったのだから、Falseが返る。
エラーが出ていなければ、最後にisExistPrinterがTrueになるので、Trueが返る。
たったこれだけの簡単なコード。
使ってみる
まず、イミディエイト・ウインドウに、
?Application.ActivePrinter
と打ち込んで[Enter]をドン!

アクティブなプリンタが「JUST PDF 3 on Ne03:」だということがわかる。
で、今度はイミディエイト・ウインドウに
isExistPrinter("ち~んw")
と入力して[Enter]をポン!
「ち~んw」などというアホな名前のプリンタがあるわけがないので、当然

Falseが返る。
この状態で、イミディエイト・ウインドウに
?Application.ActivePrinter
と打ち込んで[Enter]をプチッ!

ご覧のように、アクティブなプリンタは元通りになっている。
当然、イミディエイト・ウインドウに
isExistPrinter("JUST PDF 3 on Ne03:")
と打ち込んで[Enter]をズン!

キッチリTrueが返っている。
おわりに
ひとまず、ここまで。