1

我有两个函数可以根据相同的标准打开和保存两个不同的报告。除了引用之外,它们是相同的:

Function Export_MLR()
On Error GoTo Export_MLR_Err

Dim strReportName As String

DoCmd.OpenReport "Market Rate Notification Final", acViewPreview
strReportName = "S:\National Installations\Market Labor Rates\MLR_INV\MLR\" & Format    (Reports![Market Rate Notification Final].Market_ID, "00") & " " & Replace(Reports![Market  Rate Notification Final].Product_Code, " / ", "_") & "-" & "Market Rate Notification Final" & "_" & Format(Date, "mmddyy") & ".pdf"

DoCmd.OutputTo acOutputReport, "Market Rate Notification Final", "PDFFormat(*.pdf)", strReportName, False, , , acExportQualityScreen
DoCmd.Close acReport, "Market Rate Notification Final", acSaveNo

Export_MLR_Exit:
Exit Function

Export_MLR_Err:
MsgBox Error$
Resume Export_MLR_Exit


End Function

然后我创建了这个函数来选择数据并将其逐行放入报告引用的表格中:

Function MassMarket()
On Error GoTo MassMarket_ERR

Dim db As DAO.Database
Dim rs1 As DAO.Recordset
Dim rs2 As DAO.Recordset


'this query creates my rs1 recordset'
DoCmd.SetWarnings (warningsOff)
DoCmd.OpenQuery "mass_market", acNormal, acEdit
DoCmd.SetWarnings (warningsOn)



Set db = CurrentDb()
Set rs1 = db.OpenRecordset("Mass_market_Rate_change")
Set rs2 = db.OpenRecordset("tbl_Form_Auto")


'this checks and clears any records in rs2' 
If rs2.EOF = False And rs2.BOF = False Then
rs2.MoveFirst
rs2.Delete
End If
rs1.MoveFirst



'loop goes through and adds 1 line runs reports saves them and deletes line'
 Do Until rs1.EOF


    Set rs2 = db.OpenRecordset("tbl_Form_Auto")
        rs2.AddNew
        rs2![MarketID] = rs1![MarketID]
        rs2![Product_ID] = rs1![Product_ID]
       rs2.Update
    Call Export_Invoice
    Call Export_MLR

    rs1.MoveNext
    rs2.MoveFirst
    rs2.Delete

 Loop

MassMarket_Exit:
Exit Function

MassMarket_ERR:
MsgBox Error$
Resume MassMarket_Exit

End Function

现在所有这一切都像一个魅力,但它平均每分钟创建 16 个 .pdf 文件,而我必须创建 820 个 .pdf 文件(大约 50 分钟)。如果这是我能做到的最好的,那么我会接受它,但如果可能的话,我很想把这个时间减半。感谢您的任何和所有输入。NR

4

1 回答 1

1

在评论中,您指出大部分时间都花在将报告导出为 PDF 的功能上。我不确定我们是否可以加快速度。

您似乎打开了一个报告,引用该报告中的一个值以用作 PDF 文件名的一部分,然后调用OutputTo具有相同报告名称的方法将其保存为 PDF。

在那种情况下,我不确定“幕后”会发生什么...... Access 是否打开了报表对象的第二个实例,或者是否足够聪明地看到您已经打开了一个实例并只使用该实例。

作为测试,尝试向 Access 发出信号以使用第一个报表实例。从该方法的ObjectName参数的在线帮助中OutputTo

如果要输出活动对象,请为 ObjectType 参数指定对象的类型并将此参数留空。

所以我建议在你的代码中试试这个:

DoCmd.OutputTo acOutputReport, , "PDFFormat(*.pdf)", _
    strReportName, False, , , acExportQualityScreen

如果 Access 报错,请尝试使用ObjectName参数的空字符串。

DoCmd.OutputTo acOutputReport, "", "PDFFormat(*.pdf)", _
    strReportName, False, , , acExportQualityScreen

我不知道这个建议会在多大程度上(或什至)加速你的代码。但如果你不能以某种方式加速这些导出功能,我的预感是你希望将总时间减少一半是一个不稳定的提议。

于 2012-09-17T16:33:07.327 回答