如何用vba设置电脑上的默认打印机?

如何用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

 

       

发表评论