使用VBA打印PDF文件

使用VBA打印工作表和工作簿文件都很容易实现,但是有时需要使用VBA打印已经保存在本机的其他文件,例如PDF文件格式的账单,如果这个PDF并非由Excel生成的那么就无法使用前述方法实现。

调用Windows的Shell命令可以实现打印PDF文件。

示例代码如下。

#If VBA7 And Win64 Then
    Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr
#Else
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
        ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
#End If

Sub PrintPDFUsingAPI()
    Dim PDFPath As String, result
    PDFPath = "d:\temp\test.pdf"
    result = ShellExecute(0, "print", PDFPath, 0&, 0&, 0)
    If result > 32 Then
        MsgBox "打印命令已发送至默认打印机。"
    Else
        MsgBox "无法执行打印命令。"
    End If
End Sub

【代码解析】
第1~9行代码声明Windows API函数,这里使用了条件编译,以便于适配32位和64位Office软件。
第13行代码指定PDF文件的全路径。
第14行代码打印PDF文件。
如果API执行成功返回值为32,第15行代码判断返回值,第16行和18行代码输出相应的提示信息。

在Excel VBA中,你可以使用ActiveX Data Objects (ADO) 和 Adobe Acrobat SDK 来将两个工作表合并并打印PDF文件。以下是一个简单的步骤和示例代码: 1. 首先,确保你的计算机上安装了Adobe Acrobat Reader DC(用于创建PDF),以及Office的VBA支持。 2. 安装ADO控件:在VBA编辑器中,转到“工具” > “引用...”,然后查找Microsoft ActiveX Data Objects 6.0 Library,勾选它并确定。 3. 使用以下代码作为基础: ```vba Sub PrintTwoSheetsToPDF() Dim ws1 As Worksheet Dim ws2 As Worksheet Dim pdfDoc As Object ' ADO对象用于操作PDF Dim rngData As Range ' 设置工作表对象 Set ws1 = ThisWorkbook.Sheets("Sheet1") ' 更改为实际的工作表名称 Set ws2 = ThisWorkbook.Sheets("Sheet2") ' 初始化PDF对象 Set pdfDoc = CreateObject("AcroExch.PDDoc") ' 打开第一个工作表并添加到PDF With ws1 Set rngData = .UsedRange ' 或者指定特定区域 pdfDoc.Open "C:\Temp\Output.pdf", , True ' 输出路径和创建新文档 pdfDoc.AddPageFromWorksheet .ChartSheet ' 如果有图表页,可以添加 pdfDoc.PrintOut .Left, .Top, .Width, .Height, False, True, rngData ' 打印PDF End With ' 同样的过程对第二个工作表进行 '... ' 关闭PDF文档 pdfDoc.Close SaveChanges:=True ' 清理对象 Set pdfDoc = Nothing End Sub ``` 4. 将上面的代码复制到VBA编辑器中,记得修改`"Sheet1"`和`"Sheet2"`为你想要合并的两个工作表的实际名称。 5. 运行这个宏,它会创建一个新的PDF文件并将指定的工作表内容打印进去。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值