You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA宏设置网络打印机为活动打印机时遇1004错误求助

解决VBA获取ActivePrinter时的运行时错误1004

错误原因分析

  • 直接读取Application.ActivePrinter时,若系统未设置默认打印机,或Excel无法访问当前默认打印机,会触发1004错误。
  • 直接用\\SERVER\PRINTER-NAME设置打印机的方式不正确,Windows下Excel识别的打印机名称并非单纯网络路径,而是包含端口信息的完整格式(例如"PRINTER-NAME on Ne02:")。

解决方案步骤

  1. 添加错误捕获避免读取失败:在获取当前打印机前加入错误处理,防止无默认打印机时程序崩溃。
  2. 获取正确的打印机完整名称:枚举系统可用打印机,匹配目标网络打印机对应的完整名称后再设置。
  3. 恢复原打印机设置:打印完成后将打印机恢复至初始状态,不影响后续操作。

修正后的代码

Sub Print1sided()
    Dim ws As Worksheet
    Dim wb As Workbook
    Dim currentPrinter As String
    Dim targetPrinterFullName As String
    Dim printerFound As Boolean
    
    ' 目标打印机的网络路径
    Const targetPrinterPath As String = "\\SERVER\PRINTER-NAME"
    
    ' 错误捕获:获取当前默认打印机,避免无默认打印机时出错
    On Error Resume Next
    currentPrinter = Application.ActivePrinter
    On Error GoTo 0
    
    ' 枚举系统打印机,找到目标打印机的完整名称
    Dim prt As Printer
    printerFound = False
    For Each prt In Application.Printers
        If prt.DeviceName = targetPrinterPath Or prt.Port = targetPrinterPath Then
            targetPrinterFullName = prt.Name
            printerFound = True
            Exit For
        End If
    Next prt
    
    ' 找到目标打印机后执行打印
    If printerFound Then
        Application.ActivePrinter = targetPrinterFullName
        
        Set wb = ThisWorkbook
        For Each ws In wb.Worksheets
            With ws.PageSetup
                .PaperSize = xlPaperA3
                .Orientation = xlLandscape
                .PrintArea = ""
                .Order = xlOverThenDown
                .PrintQuality = 600
                .Duplex = xlDuplexSimplex ' 设置为单面打印
            End With
            ws.PrintOut
        Next ws
        
        ' 恢复原打印机设置(若之前成功获取)
        If currentPrinter <> "" Then
            On Error Resume Next
            Application.ActivePrinter = currentPrinter
            On Error GoTo 0
        End If
    Else
        MsgBox "未找到目标打印机:" & targetPrinterPath, vbExclamation
    End If
End Sub

额外说明

  • 通过Application.Printers枚举所有可用打印机,匹配目标路径对应的完整名称,解决了格式不兼容问题。
  • 加入错误处理和打印机存在性检查,提升了代码稳定性。
  • 打印完成后恢复原打印机,不会修改用户的默认打印机设置。

内容的提问来源于stack exchange,提问作者Jayman90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:25:26