Excel VBA宏设置网络打印机为活动打印机时遇1004错误求助
解决VBA获取ActivePrinter时的运行时错误1004
错误原因分析
- 直接读取
Application.ActivePrinter时,若系统未设置默认打印机,或Excel无法访问当前默认打印机,会触发1004错误。 - 直接用
\\SERVER\PRINTER-NAME设置打印机的方式不正确,Windows下Excel识别的打印机名称并非单纯网络路径,而是包含端口信息的完整格式(例如"PRINTER-NAME on Ne02:")。
解决方案步骤
- 添加错误捕获避免读取失败:在获取当前打印机前加入错误处理,防止无默认打印机时程序崩溃。
- 获取正确的打印机完整名称:枚举系统可用打印机,匹配目标网络打印机对应的完整名称后再设置。
- 恢复原打印机设置:打印完成后将打印机恢复至初始状态,不影响后续操作。
修正后的代码
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
相关产品推荐
相关产品推荐

