【问题标题】:Setting Default Printer to Microsoft Print to PDF将默认打印机设置为 Microsoft Print to PDF
【发布时间】:2020-07-22 14:57:18
【问题描述】:

我目前正在使用 vba 宏来填写 pdf 表单并将其打印到另一个 pdf 中。如果“Microsoft Print to PDF”是默认打印机,这很好用,但是我确实需要不时更改它并且忘记将其更改回来。我目前在另一个宏上使用下面的代码将默认打印机更改为办公室中的实际纸质打印机;但是,当我将它与 Microsoft Print to PDF 打印机一起使用时,它会运行但不会更改默认打印机。

CreateObject("WScript.Network").SetDefaultPrinter "Microsoft Print to PDF"

【问题讨论】:

  • 这可能对你有帮助...exceltip.com/printing-in-vba/…
  • 谢谢,但这是我目前使用的确切代码,只是在之后将打印机设置回原始代码。请问为什么这被否决了?我认为这是一个非常简单的问题,但我在网络上的任何地方都找不到答案。
  • 您在 Windows 10 中工作吗?

标签: excel vba


【解决方案1】:

您可以在excel vba中设置活动打印机如下:

Application.ActivePrinter = "Ne04上的兄弟HL-L2350DW系列:"

您可以通过设备和打印机确定打印机名称。但是,关于 Ne04: 有点神秘。它应该是端口,但如果您查看打印机属性和/或注册表,则找不到此值。

我发现确定此值的唯一方法是将打印机设置为默认值,然后输入 Excel 并在 VBA 即时窗口中输入 ?ActivePrinter。

?ActivePrinter
Foxit Reader PDF Printer on Ne02:

获得所需信息后,您可以轻松地更改代码,如下所示:

DefaultPtr =Application.ActivePrinter
Application.ActivePrinter = "Foxit Reader PDF Printer on Ne02:"
'***Do your printing here***
Application.ActivePrinter = DefalutPtr

【讨论】:

    【解决方案2】:

    这是@FaneDuru 解决方案的一个插件,它实现了一个显示打印机列表的对话框,突出显示当前活动的打印机并允许您选择任何其他打印机。它还包含对“发送到 OneNote 2016”打印机问题的修复。该代码用于运行如下所示的对话框:

    要运行对话框,只需将:ufSelectPrinter.Show 添加到您的 VBA 代码中。 注意:您必须使用代码中显示的标签创建对话框。

    Option Explicit
    
    Dim Printers() As String
    
    Private Sub UserForm_Initialize()
    
        Dim iSelPtr As Integer
        Dim lCntr   As Long
        Dim zCurPtr As String
        
        zCurPtr = Application.ActivePrinter
        
        Printers = GetPrinterFullNames()
        
        For lCntr = LBound(Printers) To UBound(Printers)
        
          '*** Fix for: "Send to OneNote 2016" printer that
          '***          that prints to nul: port which is dropped
          '***          by GetPrinterFullNames() routine.
            If InStr(Printers(lCntr), ":") = 0 Then
              Printers(lCntr) = Printers(lCntr) & "nul:"
            End If
          '*** END of Fix ***
            
          '*** Find current printer in the list and adjust the
          '*** index for the zero based listbox.
          
          If Printers(lCntr) = zCurPtr Then iSelPtr = lCntr - 1
        
        Next lCntr
        
      '*** Populate the List Box ***
      Me.lboxSelectPrinter.List = Printers()
      
      '*** Highlight the current Active Printer ***
      Me.lboxSelectPrinter.Selected(iSelPtr) = True
      
    End Sub
    
    Private Sub CBCancel_Click()
       Unload Me
    End Sub
    
    Private Sub CBOk_Click()
    
       Dim iSelected As Integer
       iSelected = Me.lboxSelectPrinter.ListIndex + 1 '***Zero Based***
    '   Debug.Print Printers(iSelected)
       Application.ActivePrinter = Printers(iSelected)
       Unload Me
       
    End Sub
    
    

    HTH

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 1970-01-01
      • 2021-06-06
      • 2017-08-16
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多