指定文件名打印至Microsoft Print to PDF的相关技术问题
针对Microsoft Print to PDF的VBA问题解答
1. 如何传递特定文件名和路径避免打印弹窗?
直接使用PrintOut方法的OutputFileName参数,无需依赖设置ActivePrinter后触发的系统弹窗。以Excel为例:
ActiveSheet.PrintOut _ Printer:= "Microsoft Print to PDF", _ OutputFileName:= "C:\指定路径\目标文件名.pdf", _ PrintToFile:= True
Word中用法类似:
ActiveDocument.PrintOut _ Printer:= "Microsoft Print to PDF", _ OutputFileName:= "C:\指定路径\目标文件名.pdf", _ PrintToFile:= True
该参数会直接将输出定向到指定路径,跳过保存对话框。
2. 如何处理不同机器上的打印机端口差异?
Microsoft Print to PDF的端口(如Ne01、Ne00)并非固定,硬编码端口会导致跨机器失效。可以通过VBA动态遍历打印机列表,获取完整的打印机名称(含端口):
Function GetPDFPrinterFullName() As String Dim prt As Printer For Each prt In Printers If InStr(prt.DeviceName, "Microsoft Print to PDF") > 0 Then GetPDFPrinterFullName = prt.DeviceName & " on " & prt.Port Exit Function End If Next prt GetPDFPrinterFullName = "" ' 未找到时返回空值 End Function
调用该函数获取名称后,再用于ActivePrinter设置或PrintOut的Printer参数即可适配不同机器。
3. 解决"sub or function not defined"(Findprinter错误)
VBA中没有内置的FindPrinter函数,该函数通常是用户自定义的工具函数。你可以用上面问题2中的GetPDFPrinterFullName函数替代,或者通过WMI查询获取打印机信息:
Function GetPDFPrinterName() As String Dim objWMIService As Object, colPrinters As Object, objPrinter As Object Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colPrinters = objWMIService.ExecQuery("SELECT * FROM Win32_Printer WHERE Name LIKE '%Microsoft Print to PDF%'") For Each objPrinter In colPrinters GetPDFPrinterName = objPrinter.Name Exit Function Next objPrinter GetPDFPrinterName = "" End Function
直接使用自定义的遍历函数即可替代不存在的FindPrinter。
4. 修复另存为PDF时的边距和尺寸问题
问题根源是文档的页面设置未正确配置为A4,需在导出PDF前强制设置页面参数。以Excel为例:
' 先设置页面为A4并调整边距 With ActiveSheet.PageSetup .PaperSize = xlPaperA4 .LeftMargin = Application.InchesToPoints(0.7) .RightMargin = Application.InchesToPoints(0.7) .TopMargin = Application.InchesToPoints(0.75) .BottomMargin = Application.InchesToPoints(0.75) End With ' 导出为PDF ActiveSheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:= "C:\指定路径\目标文件名.pdf", _ Quality:=xlQualityStandard
Word中的配置代码:
With ActiveDocument.PageSetup .PaperSize = wdPaperA4 .LeftMargin = CentimetersToPoints(2.5) ' 按需求调整单位和数值 .RightMargin = CentimetersToPoints(2.5) .TopMargin = CentimetersToPoints(2.5) .BottomMargin = CentimetersToPoints(2.5) End With ActiveDocument.ExportAsFixedFormat _ OutputFileName:= "C:\指定路径\目标文件名.pdf", _ ExportFormat:=wdExportFormatPDF
确保导出前覆盖页面设置,即可生成符合A4规格、边距正确的PDF。
内容的提问来源于stack exchange,提问作者Floyd
相关产品推荐
相关产品推荐

