Excel VBAで指定したネットワークプリンターに印刷できない原因と対処法|ActivePrinterが切り替わらない場合の確認ポイント

Visual Basic

Excel VBAで特定のプリンターを指定して印刷する処理を作成していても、突然別のプリンターへ印刷される、最後に使用したプリンターが選択されてしまうといった現象が発生することがあります。

特にVPN経由で別拠点のネットワークプリンターを利用している環境では、WindowsやExcelが保持しているプリンター情報、ActivePrinterの指定方法、プリンタードライバーの状態などが影響する場合があります。この記事では、Excel VBAで指定したプリンターに印刷できなくなった場合の原因と解決方法を詳しく解説します。

Excel VBAのActivePrinter指定が効かなくなる主な原因

Excel VBAでは、ActivePrinterプロパティを利用して印刷先のプリンターを変更できます。しかし、指定したプリンター名が現在のWindows環境で認識されていない場合、Excelはエラーを出さずに最後に使用したプリンターへ処理を渡すことがあります。

例えば、以下のようなコードの場合です。

ActiveWindow.SelectedSheets.PrintOut , ActivePrinter:=”\\192.168.101.1\lp”

この指定が正しく動作するには、Windows側がその名前を現在利用可能なプリンターとして認識している必要があります。VPN越しの共有プリンターでは、接続状態や認証状態によって一時的に見えなくなることがあります。

最後に印刷したプリンターへ出力される理由

Excelは印刷時に使用したプリンター情報を内部的に保持しています。指定したActivePrinterが無効だった場合、Excelは現在の既定プリンターや直前に使用したプリンターへフォールバックする動作をすることがあります。

例えば、普段は拠点Aのネットワークプリンターへ印刷していたにもかかわらず、拠点BのUSBプリンターで一度印刷すると、その後VBAの指定が失敗した際にはUSBプリンターへ印刷される場合があります。

つまり、VBAコード自体が突然変更されたのではなく、指定したプリンター名が認識されていない可能性があります。

ActivePrinterの正しいプリンター名を確認する方法

Excel VBAでは、見た目のプリンター共有名とActivePrinterで使用する名前が異なる場合があります。

現在Excelが認識しているプリンター名を確認するには、以下のマクロを実行します。

Sub CheckPrinter()
MsgBox Application.ActivePrinter
End Sub

表示された内容には、プリンター名だけでなくポート情報も含まれる場合があります。例えば、実際には以下のような形式になっていることがあります。

\\192.168.101.1\lp on Ne02:

この場合、VBAで指定する文字列も同じ形式に合わせる必要があります。

ネットワークプリンターの場合に確認するポイント

VPN経由でNASや共有プリンターへ接続している場合、通常の社内LANとは異なる問題が発生します。

確認すべきポイントは以下です。

  • VPN接続後にプリンター共有へ正常にアクセスできるか
  • 共有プリンターがWindowsの「デバイスとプリンター」に表示されているか
  • プリンタードライバーが正常にインストールされているか
  • 共有名が変更されていないか
  • Windows更新後にプリンター接続情報が壊れていないか

例えば、別拠点では問題なく動作している場合、その拠点だけWindows側のプリンター登録情報やドライバー設定が壊れている可能性があります。

0x00000709エラーが発生する場合の原因と対処法

Windowsのプリンター設定変更時に発生する0x00000709エラーは、既定プリンターの変更やプリンター登録情報の不整合が原因で起こることがあります。

対処方法としては、まず不要になったプリンター登録を削除し、共有プリンターを再追加します。その際、単純に追加するだけではなく、古いドライバーや設定情報が残っていないか確認することが重要です。

また、Windowsの設定から「Windowsで通常使うプリンターを管理する」を無効化すると、ExcelやWindowsが勝手に既定プリンターを変更する現象を防げる場合があります。

VBAコードを安定させるための改善方法

ネットワークプリンターを指定する場合は、印刷前にActivePrinterを変更し、印刷後に元へ戻す処理を入れる方法が有効です。

例として以下のような処理にします。

Sub PrintNetwork()
Dim OldPrinter As String
OldPrinter = Application.ActivePrinter
On Error GoTo ErrorHandler
Application.ActivePrinter = “\\192.168.101.1\lp on Ne02:”
ActiveSheet.PrintOut
Application.ActivePrinter = OldPrinter
Exit Sub
ErrorHandler:
Application.ActivePrinter = OldPrinter
MsgBox “プリンターを変更できませんでした”
End Sub

重要なのは、共有名だけではなくExcelが認識しているポート名まで指定することです。

まとめ:Excel VBAで指定プリンターに印刷できない場合は設定情報を確認する

Excel VBAで指定したネットワークプリンターへ印刷されず、最後に使用したプリンターへ出力される場合は、ActivePrinterの指定が正しく認識されていない可能性が高いです。

まずはApplication.ActivePrinterで現在認識されているプリンター名を確認し、共有名だけでなくポート情報を含めた正しい文字列を指定してください。

またVPN環境ではプリンター接続状態やWindows側の登録情報が影響するため、ドライバーの再登録や0x00000709エラーへの対処も合わせて確認すると、安定した印刷環境を構築できます。

コメント

タイトルとURLをコピーしました