Runtime error

Status
Niet open voor verdere reacties.

SignaL

Gebruiker
Lid geworden
15 mrt 2013
Berichten
7
In Access verstuur ik facturen per mail en voor de klanten die geen email hebben worden deze geprint. Dit lukt allemaal met de onderstaande code. Echter nadat ik de verzonden en geprinte facturen naar een tabel heb geexporteerd en gezorgd heb dat de query (qryOrdergegevensFacturen) voor het rapport leeg is en dan toch de code laat werken worden er toch facturen geproduceerd, echter zonder de gegevens, dus alleen de layout. Na nieuwe orders bevat de query weer gegevens om de facturen weer te mailen/printen. Bij het nazoeken waarom heb ik ontdekt dat Reports(sRapport) dit aangeeft: The reportname VerzendenFacturen you entered is misspelled or.... Verder gevonden dat dit error 2451 is. Ik heb op het internet gezocht naar oplossingen, maar helaas niet zelf op kunnen lossen.
Ik ben geen ervaren vba gebruiker. Kan iemand mijn helpen. De oplossing hoeft alleen maar te vertellen dat er geen gegevens beschikbaar zijn voor mailen/printen en dus verder geen actie. Bij voorbaat mijn dank.

Dim strSQL As String, strSQL_Rapport As String, sRapport As String
Dim sFilter As String, sTabel As String
Dim iAantal As Integer
strSQL = "SELECT * FROM tblEmail"
sRapport = "VerzendenFacturen"
With CurrentDb.OpenRecordset(strSQL)
'Records doorlopen, en rapport voor elk record instellen en mailen
.MoveLast
.MoveFirst
iAantal = .RecordCount
If iAantal = 0 Then Exit Sub
Do While Not .EOF
DoCmd.OpenReport sRapport, acViewDesign, , , acHidden
sTabel = Reports(sRapport).RecordSource
If InStr(1, UCase(sTabel), "WHERE") > 0 Then
strSQL_Rapport = Left(sTabel, InStr(1, sTabel, "WHERE ") - 1)
Else
If InStr(1, UCase(sTabel), "SELECT") = 0 Then
If InStr(1, sTabel, " ") > 0 And InStr(1, sTabel, "[") = 0 Then
sTabel = "[" & sTabel & "]"
End If
strSQL_Rapport = "SELECT * FROM " & sTabel & " "
Else
strSQL_Rapport = sTabel
End If
End If
'Extra loopje, om de punt-komma's te verwijderen.
Do Until Right(strSQL_Rapport, 1) <> ";"
strSQL = Left(strSQL_Rapport, Len(strSQL_Rapport) - 1)
Loop

'Klantfilter op rapport zetten
sFilter = " WHERE (Klantnummer =" & !KlantID & ");"
strSQL_Rapport = strSQL_Rapport & sFilter
Reports(sRapport).RecordSource = strSQL_Rapport
DoCmd.Close acReport, sRapport, acSaveYes
'Controle of een mailadres aanwezig is
If !Mac <> 1 Then
'Factuur printen
DoCmd.OpenReport sRapport, acNormal
Else
'Factuur verzenden
DoCmd.SendObject acSendReport, sRapport, acFormatPDF, !Email, , , "Van Zomerschool voor " _
& !KlantNaam, " Hierbij als bijlage het bericht voor uw activiteiten 2013", True
End If
.MoveNext
Loop
.Close
End With

End Sub
 
Begin eens met de code op te maken met de CODE tag; zo is hij behoorlijk onleesbaar. En graag ook de code netjes laten inspringen, zodat we de lussen goed kunnen beoordelen.
 
Kun jij ondertussen (je krijgt het nog druk) ook eens kijken naar de gebeurtenis <Bij geen gegevens>.
Code:
Private Sub Report_NoData(Cancel As Integer)
    MsgBox "Er zijn geen gegevens."
End Sub
 
Hallo Michel,

Sorry voor de "wancode", ik stuur deze nu als bijlage. Na er verder over nagedacht te hebben is het probleem dat deze code een mail/print klaarzet zonder controle of de query wel of geen records bevat.Bij aanwezige records werkt alles ok. Ik heb intussen met mijn beperkte kennis nog getracht iets te vinden, maar de pogingen waren niet succesvol. Bij voorbaat mijn dank en groet, LeoBekijk bijlage Access-mail-printencode.txt
 
In je code zie ik anders wel een check op het aantal records. Dus hoe zit dat dan volgens jou?
 
Michel,
Vanwege tijdsgebrek moet ik morgen gaan mailen/printen. Daarom een andere oplossing gezocht en gevonden. Door de query van de mailadressen zo aan te passen dat alleen die adressen voorkomen die een factuur moeten krijgen. Voorlopig kan ik ermee vooruit. Nogmaals bedankt voor je aandacht en groet, Leo
 
Lijkt mij ook een vééél betere oplossing; wat je niet hoeft te checken kan ook niet fout gaan. Fouten afvangen bij de basis dus.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan