在 如何用vba列出电脑上所有的打印机名称和端口? 和在如何用vba获取电脑上连接的默认打印机名称?
两篇文章中我们分别介绍了如何获取电脑上当前的默认打印名称和列举当前电脑上的所有打印机。
但是用
Excel.Application.ActivePrinter
获取的默认打印机的结果为
\\PC-20130852\HP LaserJet P2035 UPD PCL 5 在 Ne12:
而用WScript.Network列举的打印机的名称为
\\PC-20130852\HP LaserJet P2035 UPD PCL 5
对比下,发现如果要用
Excel.Application.ActivePrinter
语句设置其它的打印机为默认的打印机的话,还需要知道其它的打印机对应的Ne是什么,只提供打印机的名称是不行的。
比如用以下的代码设置默认的打印机:
Sub QQ1722187970() Excel.Application.ActivePrinter = "HP LaserJet P4515 UPD PCL 6" End Sub
则会弹出如下图所示的错误提示:
那么,如何获取到本地电脑上所有曾经有连接过打印机的对应Ne呢?
可以使用如下的代码:
Sub QQ1722187970() Dim WshNetwork As Object Dim oPrinter As Object Set WshNetwork = CreateObject("WScript.Network") With WshNetwork Set oPrinter = .EnumPrinterConnections For i = 0 To oPrinter.Count - 1 Step 2 Debug.Print "打印机名称:" & oPrinter(i + 1) .SetDefaultPrinter oPrinter(i + 1) Debug.Print "对应的ActivePrinter参数打印机名称" & Excel.Application.ActivePrinter Next i End With End Sub
结果如下:
打印机名称:Send To OneNote 2016 对应的ActivePrinter参数打印机名称Send To OneNote 2016 在 nul: 打印机名称:发送至 OneNote 2013 对应的ActivePrinter参数打印机名称发送至 OneNote 2013 在 nul: 打印机名称:Snagit 2018 对应的ActivePrinter参数打印机名称Snagit 2018 在 Ne00: 打印机名称:pdfFactory Pro 对应的ActivePrinter参数打印机名称pdfFactory Pro 在 FPP4: 打印机名称:Microsoft XPS Document Writer 对应的ActivePrinter参数打印机名称Microsoft XPS Document Writer 在 Ne01: 打印机名称:HP LaserJet P4515 UPD PCL 6 对应的ActivePrinter参数打印机名称HP LaserJet P4515 UPD PCL 6 在 Ne02: 打印机名称:HP LaserJet P4015 UPD PCL 6 对应的ActivePrinter参数打印机名称HP LaserJet P4015 UPD PCL 6 在 Ne03: 打印机名称:HP LaserJet P2055d UPD PCL 5 (Copy 1) 对应的ActivePrinter参数打印机名称HP LaserJet P2055d UPD PCL 5 (Copy 1) 在 Ne04: 打印机名称:HP LaserJet P2055d UPD PCL 5 对应的ActivePrinter参数打印机名称HP LaserJet P2055d UPD PCL 5 在 Ne05: 打印机名称:HP LaserJet P2015 Series UPD PCL 5 对应的ActivePrinter参数打印机名称HP LaserJet P2015 Series UPD PCL 5 在 Ne06: 打印机名称:HP Color LaserJet CP2025n UPD PCL 6 对应的ActivePrinter参数打印机名称HP Color LaserJet CP2025n UPD PCL 6 在 Ne07: 打印机名称:Generic 65C-9SeriesPCL 对应的ActivePrinter参数打印机名称Generic 65C-9SeriesPCL 在 Ne08: 打印机名称:Fax 对应的ActivePrinter参数打印机名称Fax 在 Ne09: 打印机名称:BTP-2100E(U) 1 对应的ActivePrinter参数打印机名称BTP-2100E(U) 1 在 Ne10: 打印机名称:\\Cl\BTP-2100E(P) 对应的ActivePrinter参数打印机名称\\Cl\BTP-2100E(P) 在 Ne11: 打印机名称:\\PC-20130852\HP LaserJet P2035 UPD PCL 5 对应的ActivePrinter参数打印机名称\\PC-20130852\HP LaserJet P2035 UPD PCL 5 在 Ne12:
当然,如果我们想不管Ne是什么,就以看到的打印机名称作为参数设置默认打印机,可以使用如下的代码:
Sub QQ1722187970() Dim WshNetwork As Object Set WshNetwork = CreateObject("WScript.Network") Dim sPrintName As String sPrintName = "HP LaserJet P2055d UPD PCL 5" With WshNetwork '直接以打印机名称为参数设置默认的打印机 .SetDefaultPrinter sPrintName End With End Sub
以上关于打印机对应的端口问题,也可以通过查找以下注册表项来获取:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts
发表评论