Excel 通过VBA设置默认打印机

Excel 通过VBA设置默认打印机,excel,vba,printing,Excel,Vba,Printing,我正在运行一个Excel宏,它可以在两台打印机之间切换,一台名为“RecOffice\u Pink”,另一台名为“RecOffice\u White” 这是解决VBA无法轻松指定要打印的纸盘问题的一个棘手的解决方法。粉红色打印机只有一个托盘被禁用,其中包含我们的粉红色纸张 我正在使用 CreateObject(WScript.Network).SetDefaultPrinter "RecOffice_Pink" and CreateObject(WScript.Network).SetDefau

我正在运行一个Excel宏,它可以在两台打印机之间切换,一台名为“RecOffice\u Pink”,另一台名为“RecOffice\u White”

这是解决VBA无法轻松指定要打印的纸盘问题的一个棘手的解决方法。粉红色打印机只有一个托盘被禁用,其中包含我们的粉红色纸张

我正在使用

CreateObject(WScript.Network).SetDefaultPrinter "RecOffice_Pink"
and
CreateObject(WScript.Network).SetDefaultPrinter "RecOffice_White"
这在我们的Windows7电脑上运行得很好,但在我们的任何Windows10电脑上似乎都不起作用

没有抛出错误,没有创建消息,只是似乎没有切换打印机

我已尝试将它们设置为网络上的共享打印机,并在每台计算机上设置,这两种设置在Windows 7上都很好。

设置默认打印机 列出新工作簿中的打印机和打印机属性
在Windows 10打印机设置中,是否将选项设置为“让Windows管理默认打印机”?试着改变一下。我有一些代码可以满足你的需要。我正在吃早饭。给我几分钟,我会看看我用了什么。我用的代码和你用的非常相似<代码>CreateObject(“WScript.Network”).SetDefaultPrinter“\\PS02.samba.net\HELPS006”。唯一的区别是
WScript.Network
具有
。不确定这是否是问题所在。您还可以在工作簿中添加打开行,将打印机添加到计算机(如果未安装)
Set WshNetwork=CreateObject(“WScript.Network”)
WshNetwork.AddWindowsPrinterConnection”\\PS02.samba.net\HELPS006“
。我的打印机是共享网络打印机。你的解决方案成功了,布拉克斯!关闭该选项可使脚本正常运行。
  SetDefaultPrinter "RecOffice_Pink"
 Sub SetDefaultPrinter(PrinterName As String, Optional ComputerName As String = ".")
    Dim Printer As Object, Printers As Object, WMIService As Object
    Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
    Set Printers = WMIService.ExecQuery("Select * from Win32_Printer Where Name = '" & PrinterName & "'")

    For Each Printer In Printers
        Printer.SetDefaultPrinter
    Next

End Sub
Sub ListPrinters(Optional ComputerName As String = ".")
    Dim WMIService As Object
    Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")

    Dim Printers As Object
    Set Printers = WMIService.ExecQuery("Select * from Win32_Printer")

    Dim Printer As Object
    Dim Item As Object
    Dim Results
    Dim r As Long, c As Long, NameIndex As Long
    For Each Printer In Printers
        ReDim Results(1 To Printers.Count + 1, 1 To Printer.Properties_.Count)
        r = 1
        For Each Item In Printer.Properties_
            c = c + 1
            If Item.Name = "Name" Then NameIndex = c
            Results(r, c) = Item.Name
        Next
        Exit For
    Next

    For Each Printer In Printers
        r = r + 1
        c = 0
        For Each Item In Printer.Properties_
            c = c + 1
            Results(r, c) = Item.Value
        Next
    Next

    Dim SheetsInNewWorkbook As Long
    SheetsInNewWorkbook = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 2
    With Workbooks.Add
        With Worksheets(1)
            .Range("A1").Resize(UBound(Results), UBound(Results, 2)).Value = Results
            .Columns(NameIndex).Cut
            .Columns(1).Insert Shift:=xlDown
            .ListObjects.Add(xlSrcRange, .Range("A1").CurrentRegion, , xlYes).Unlist
            .Columns.AutoFit
            .Range("A1").CurrentRegion.Copy
        End With
        With Worksheets(2)
            .Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
            Application.CutCopyMode = False
            .Columns.AutoFit
        End With
    End With
    Application.SheetsInNewWorkbook = SheetsInNewWorkbook
End Sub