【问题标题】:Export to formatted PDF from MS Access从 MS Access 导出为格式化的 PDF
【发布时间】:2017-04-23 14:57:48
【问题描述】:

我对 MS Access 非常陌生。目标是从 MS Access DB 导出多个 PDF 文件。目前我可以通过以下代码导出多个 Excel 文件。但我想将其导出为 PDF,表格中的格式更改很少(颜色、字体等),并在 PDF 中添加页眉和页脚注释。

Private Sub Command4_Click()
Dim rsGroup As DAO.Recordset
Dim ColumnName As String
Dim myPath As String

myPath = "E:\TestExport\"

Set rsGroup = CurrentDb.OpenRecordset("SELECT DISTINCT TableName.Column FROM TableName", dbOpenDynaset)

Do While Not rsGroup.EOF
    ColumnName = rsGroup!Column

    Dim rsExportSQL As String
    rsExportSQL = "SELECT * FROM TableName WHERE TableName.Column='" & ColumnName & "'"

    Dim rsExport As DAO.QueryDef
    Set rsExport = CurrentDb.CreateQueryDef("myExportQueryDef", rsExportSQL)


    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "myExportQueryDef", myPath & RegionName & ".xls", True

    CurrentDb.QueryDefs.Delete rsExport.Name

    rsGroup.MoveNext
Loop

End Sub

谢谢

【问题讨论】:

  • 您好,我建议您根据您的查询创建一份报告,以微调详细信息和格式。报告完成后,只需为任何其他查询创建一个模板,并将 vba 导出为 pdf。

标签: ms-access pdf vba


【解决方案1】:

如前所述,PDF 是结构化的、固定格式的文档文件,而不是动态数据文件。考虑以下例程:

  1. 使用完整表(不是任何查询)预先设计报表作为 记录源。以任何方式(即横向/纵向、标题、字体、颜色)设置样式以供最终传播或展示。
  2. 使用DoCmd.OpenReport 方法,在打印预览中打开报表,使用该方法的WhereCondition 参数有条件地按循环值更改报表的过滤器。
  3. 然后运行DoCmd.OutputTo 以在同一循环中将预览报告输出为PDF 格式。注意:从不输出完整表,只输出过滤记录。

VBA代码

Private Sub Command4_Click()
  Dim rsGroup As DAO.Recordset
  Dim ColumnName As String, myPath As String

  myPath = "E:\TestExport\"

  Set rsGroup = CurrentDb.OpenRecordset("SELECT DISTINCT Column FROM TableName", _
                                        dbOpenDynaset)        
  Do While Not rsGroup.EOF
     ColumnName = rsGroup!Column

     ' OPEN REPORT, FILTERING RECORDSOURCE BY COLUMN VALUE
     DoCmd.OpenReport "ReportName", acViewPreview, , "Column='" & ColumnName & "'"
     ' OUTPUT REPORT TO FILE
     DoCmd.OutputTo acOutputReport, "ReportName", acFormatPDF, _
                                    myPath & ColumnName & ".pdf", False
     ' CLOSE PREVIEW
     DoCmd.Close acReport, "ReportName"

     rsGroup.MoveNext
  Loop

  rsGroup.Close
  Set rsGroup = Nothing
End Sub

【讨论】:

    【解决方案2】:

    Lybren 的解决方案是正确的方法。根据您要导出的所有查询创建报告,然后在 VBA 中使用Docmd.OutputTo 方法将报告导出为 PDF。下面是一个代码示例:

    DoCmd.OutputTo acOutputReport, "MyReportToExport", acFormatPDF, "C:/Users/MyUserAccount/Documents/MyExportedPDF.pdf"
    

    您也可以通过将“acOutputReport”更改为“acOutputQuery”来导出查询,但通过使用报告,您可以更好地控制格式。

    【讨论】:

    • 谢谢,我得到了从许多论坛的报告中导出 PDF 的代码。实际上,我想知道一个脚本中的一个过程/代码来完成所有的事情。在我给定的代码中,您可以看到一个查询正在随机创建 for 循环,并且在完成循环后它被删除。只是有任何程序/代码,我可以将查询保存为格式化报告并将报告导出为 PDF。我尝试了很多,但没有运气。你能帮帮我吗?再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    相关资源
    最近更新 更多