![如何使用 VBA 打印由下拉列表控制的图表的多个 PDF?](https://linux22.com/image/1566882/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20VBA%20%E6%89%93%E5%8D%B0%E7%94%B1%E4%B8%8B%E6%8B%89%E5%88%97%E8%A1%A8%E6%8E%A7%E5%88%B6%E7%9A%84%E5%9B%BE%E8%A1%A8%E7%9A%84%E5%A4%9A%E4%B8%AA%20PDF%EF%BC%9F.png)
我有一张 Excel 工作表,它生成一个组合图表来显示 49 个制造工作单元的趋势数据。图表源数据基于包含大量公式的单元格(下图中心)。我已构建工作表,以便用户从 A5 中的下拉列表中选择一个工作单元,然后公式和图表都会自动更新。A5 数据验证的来源是另一个工作表中的表格中的一列。我已在该工作表中设置了图表周围的打印区域。
现在,我可以使用以下代码循环遍历所有图表并将每个图表打印到单页 PDF 上:
Sub TestLoopMacro()
Sheets("My Sheet").Select
'SOURCE FOR TIMER CODE: www.TheSpreadsheetGuru.com/the-code-vault
Dim StartTime As Double
Dim SecondsElapsed As Double
'Remember time when macro starts
StartTime = Timer
Dim Count As Integer
For Count = 2 To 50
Range("A5").Select
Range("A5").Value = Worksheets("Cells Sheet").Range("E" & Count)
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"H:\Some Path\Test Exports\" & Worksheets("Cells Sheet").Range("B" & Count) & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Next Count
'Determine how many seconds code took to run
SecondsElapsed = Round(Timer - StartTime, 2)
'Notify user in seconds
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
End Sub
我希望能够将所有 49 个单元格的图表打印到单个 PDF 中。此代码成功创建了 49 个包含独特图表的 PDF。
有没有办法用 VBA 将它们导出到同一个 PDF,而不是随后用 Adobe/类似软件合并它们?我发现有人发布了尝试做类似事情的问题,但它们涉及从多个工作表(而不是同一个工作表的多个实例)导出打印区域。
答案1
Acrobat 支持 javascript,因此您可以使用 acrobat 的Doc.insertPages
方法合并文档。
或者,您可以使用Shell.ShellExecute
开源命令行 pdf 工具。