Registered 2022.09.09 Update 2023.05.21  技術習得:業務系アプリQ&A,独自開発

目次

プリンタを「NeXX」で指定して出力する

パソコンにプリンタをインストールすると、インストール順に番号が振られます。それが「NeXX」です。
XXに当たる箇所はWindowsのレジストリで確認できます。

Ne値を調べる

1.Windowsの[スタート]から[検索]に「regedit」を入力して、レジストリーエディタを起動します。

2.「コンピューター\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices」にインストール済のプリンタ名一覧が表示されます。

プリンタ名一覧

3.プリンタ名をダブルクリックすると、文字列の編集画面が開きます。

文字列の編集画面

4.値のデータに「NeXX」と表示されています。これが該当プリンタの値です。

5.以下のコードでも現在のNe値がわかります。

Sub sample()
  MsgBox Application.ActivePrinter
End Sub

1枚目のワークシートをプリンタ「Ne01」で出力するVBAの例

Sub printSample()
  Application.ActivePrinter = "プリンター名 on Ne01:"
  Worksheets(1).PrintOut
End Sub

この手法の問題

同じExcelVBAを使い同じプリンタから出力する場合、全パソコンにインストール済みプリンタのNe値が同一でないと意味がありません。
これが面倒なので私は別の手段を使っています。

プリンタ名を直接VBA内に書いて出力する

プリンタドライバのインストール時にプリンタ名を任意で設定できるため、システム担当が設定しておけば、VBAの記述が楽になります。

以下は現在のアクティブプリンタ名を変数に置き換え、プリンタ名「複合機」から印刷、その後にアクティブプリンタ名に戻す方法です。

Sub printSample()
  Dim aPrinter As String
    '現在アクティブなプリンタ名を記憶
    aPrinter = Application.ActivePrinter

    'プリンタ名「複合機」からアクティブシートのセル範囲A1:D10を印刷
    Application.ActiveSheet.Range("A1:D10").PrintOut ActivePrinter:=" 複合機"

    '印刷後に元のプリンタ名に戻す
    Application.ActivePrinter = aPrinter 

    MsgBox ("印刷しました")
  End Sub

この手法の問題

ユーザーがプリンタ名を勝手に変更すると動作しません。
ただし、これができる知識と技能を持つユーザーなら、会社支給端末の設定を勝手に変更する愚行は侵さないので、大丈夫かな、と思います。

どちらの使い勝手が良いか

個人的に「プリンタ名を直接VBA内に書いて出力する」方法がおすすめです。
全ての端末で同じ条件でないと動かせないシステムは作りたくありません。

トップへ