2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« VBAからAdobe Reader 6.0でPDFファイルを印刷する。 | トップページ | 非表示で残ってしまったExcel/Wordなどを表示する。 »

2007年1月17日 (水)

ExcelのApplication.ActivePrinterは「仕様障害」?

ActivePrinterにプリンタ名をそのまま代入してもエラーになります。
「プリンタ名 on ポート名」の形式でないと駄目なようです。
しかも、そのポート名が、USBポートのように:抜きで6文字以上の場合、
ユーザが設定し、プリンタのプロパティで表示されるポート名ではなく、
OSが勝手に割り当てたネットワークポート名のNe??:なのです。
ユーザはこれをどうやって指定すればよいのでしょうか?
全く困ったものです。

Ne??:に対応するだけなら、VBAだけで割り出せます。

Sub SetActivePrinter1(Name)
Dim n
Dim PortName
For n = 100 To 199
  PortName = Name & " on Ne" & Right(n, 2) & ":"
  TrySetActivePrinter PortName
  If Err = 0 Then Exit For
Next
If Err Then Err.Raise Err.Number
MsgBox Application.ActivePrinter
End Sub

Sub TrySetActivePrinter(Name)
On Error Resume Next
Application.ActivePrinter = Name
End Sub

LPTn:などのポートにも対応するには、レジストリを見るしかなさそう。

Sub SetActivePrinter2(Name)
Dim wShell
Const Key = "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices\"
Set wShell = CreateObject("WScript.Shell")
Application.ActivePrinter = Name & " on " & Split(wShell.RegRead(Key & Name), ",")(1)
End Sub

Wordは、ActivePrinterにプリンタ名をそのまま代入しても、問題ないようです。

« VBAからAdobe Reader 6.0でPDFファイルを印刷する。 | トップページ | 非表示で残ってしまったExcel/Wordなどを表示する。 »