2016-06-07 21 views
0

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() 
+0

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

Antwort

0

Möglicherweise hat der Name der Berichtsdatei ungültige Zeichen? (hätte dies als Kommentar gepostet, aber nicht genügend Punkte)

Können Sie einige Debug.Print-Anweisungen einfügen, um zu zeigen, was die Variablen sind, wenn es funktioniert und wann nicht?