プリンタが存在するかどうかを判定する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
が返っている。
おわりに
ひとまず、ここまで。