Der Befehl DoCmd.OutputTo schlägt auf verschiedene Elemente in einer Liste mit Fehler 2501. Im folgenden ist meine Subroutine (viel Code entfernt). Es durchläuft eine Liste von Anbietern und sendet Rechnungen per E-Mail. Wir führen Access 365 mit verknüpften Tabellen zu einem SQL Server 2008 R2 aus. Jedes Mal, wenn ich die Routine ausführe, schlägt der Code bei einem anderen Lieferanten fehl (manchmal keine Fehler). Es gibt einen Anhang pro ausgehende E-Mail. Jeder Anhang hat einen eindeutigen Dateinamen. Anhänge werden auf die Festplatte geschrieben, um Netzwerkverzögerungen zu vermeiden. Der Bericht ist ziemlich komplex und ruft manchmal Funktionen auf, die verknüpfte Tabellen treffen. Brauchen Sie Hilfe mit, wie man die Funktion robuster macht, um nicht zu versagen.DoCmd.OutputTo schlägt intermittierend auf verschiedenen Elementen innerhalb einer Liste fehl - Fehler 2501
Sub EmailInvoices()
InvFilePath = "C:\temp\"
On Error GoTo EmailInvoicesProblem
' loop through the list of suppliers, this invoice type, this date
For x = 1 To SupplierCount
SQLStr3 = "SELECT * from " & RptTypeDtlQry & WhereClause
DoCmd.OpenReport RptName, acViewDesign, , , acHidden
Set Inv_rpt = Reports(RptName)
Inv_rpt.RecordSource = SQLStr3
Inv_rpt.Caption = "Supplier " & rst!supplier_code & " " & InvType & " Invoices"
DoCmd.Close acReport, RptName, acSaveYes
'image the invoice, attach the invoice to the email, and then delete the image
InvFileName = InvFilePath & rst!supplier_code & ".pdf"
TryAgain:
DoCmd.OutputTo acOutputReport, RptName, acFormatPDF, InvFileName, False
objOutlookMsg.Attachments.Add (InvFileName)
fso.DeleteFile (InvFileName)
' send all the invoices of this supplier, this invoice type, this date in a single email.
objOutlookMsg.Send
NextSupplier:
rst.MoveNext
Next x
rst.Close
Exit Sub
End Sub 'EmailInvoices()
Fehler 2501 bedeutet normalerweise, dass es keine Daten in Ihrem Bericht gibt - Sie können Fehler auffangen und auf Err.Description berichten - Ihr Code scheint oben im Text aufgeteilt zu sein - Sie könnten SQL mit einem Recordset vorverarbeiten und zuerst feststellen, ob es Datensätze gibt bevor Sie versuchen, den Bericht zu erstellen – dbmitch