VBAを使って印刷ボタンを作ったのですが、デフォルトのプリンタが無い場合(インストールされていないetc...)はエラーが返されます。
そこで、プリンタがインストールされていない状態では処理を行わないマクロにしたいのですが、どのように組んだらよいのでしょうか?
ボタンを押す>ページ設定>印刷範囲の設定>印刷開始
という一連の動作で、ページ設定でエラーが出るので、そこに「On Error GoTo PrtOpen_Err」等を入れれば処理はストップすしますが
ページ設定はマクロでは少し時間がかかります。4項目ほど設定すると2~3秒止まってしまいます。
なので、その処理に入る前にプリンタのインストール有無を判断し、回避させたいと考えています。
単純に Application.ActivePrinter をチェックすればよいのではないでしょうか?
もしだめなら、以下のような方法があります。
インストールされているプリンタドライバの数を取得するサンプルです。
Sub test() MsgBox "インストールされているプリンタの数: " & GetPrinterDriverCount() End Sub Function GetPrinterDriverCount() As Long Dim objWMIService As Object Dim colInstalledPrinters As Object Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\.\root\cimv2") Set colInstalledPrinters = objWMIService.ExecQuery _ ("Select * from Win32_PrinterDriver") GetPrinterDriverCount = colInstalledPrinters.Count End Function
(参考)プリンタ ドライバの列挙
Application.ActivePrinterの値をチェックしてみてはいかがでしょうか。
プリンタドライバが全くインストールされていない状態でどんな値を返すのか確認できておりませんが、空文字列ではないでしょうか。
If Application.ActivePrinter = "" Then MsgBox ("No printer installed.") Exit Sub Else ' 処理 End If
動作未確認ですので、外していたらスミマセン。
[参考URL]
インストールされていない状態であると、「コントロールパネルを確認してください。既定値のプリンタ」と入るようです。
ありがとうございます、これを基にインストールされていても設定が上手くされていない場合も判断するものを作成させていただきます。