Excel VBA についての質問です。

VBAを使って印刷ボタンを作ったのですが、デフォルトのプリンタが無い場合(インストールされていないetc...)はエラーが返されます。

そこで、プリンタがインストールされていない状態では処理を行わないマクロにしたいのですが、どのように組んだらよいのでしょうか?

ボタンを押す>ページ設定>印刷範囲の設定>印刷開始
という一連の動作で、ページ設定でエラーが出るので、そこに「On Error GoTo PrtOpen_Err」等を入れれば処理はストップすしますが
ページ設定はマクロでは少し時間がかかります。4項目ほど設定すると2~3秒止まってしまいます。

なので、その処理に入る前にプリンタのインストール有無を判断し、回避させたいと考えています。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/30 09:44:09
  • 終了:2006/11/02 12:35:16

回答(2件)

id:ardarim No.1

ardarim回答回数897ベストアンサー獲得回数1452006/10/30 10:23:58

ポイント45pt

単純に 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

(参考)プリンタ ドライバの列挙

id:nyankochan

ありがとうございます、これを基にインストールされていても設定が上手くされていない場合も判断するものを作成させていただきます。

2006/11/02 12:34:42
id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/10/30 10:24:50

ポイント25pt

Application.ActivePrinterの値をチェックしてみてはいかがでしょうか。

プリンタドライバが全くインストールされていない状態でどんな値を返すのか確認できておりませんが、空文字列ではないでしょうか。

If Application.ActivePrinter = "" Then
    MsgBox ("No printer installed.")
    Exit Sub
Else
    ' 処理
End If

動作未確認ですので、外していたらスミマセン。

[参考URL]

id:nyankochan

インストールされていない状態であると、「コントロールパネルを確認してください。既定値のプリンタ」と入るようです。

2006/10/31 01:23:50

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません