Probleem met DoCmd.SendObject acReport na update Windows Access 2010

Status
Niet open voor verdere reacties.

anietje62

Gebruiker
Lid geworden
1 dec 2006
Berichten
38
Tot een paar dagen geleden werkte mailen via een knop in mijn Access db perfekt.
Daarna is er een update van windows geweest en nu opent outlook niet meer, waarna ook het rapport verdwijnt uit de database.
Heeft iemand enig idee hoe dat verholpen kan worden, dus zou ik een andere VBAcode moeten gebruiken oid?
Heb al op internet gespeurd, maar kan niks vinden.
 
Dat Outlook niet opent, zou eventueel nog wel kunnen als de standaard koppelingen in Windows niet goed zijn vastgelegd. Het hangt er ook vanaf hoe je Outlook opstart. Ik vermoed op een minder handige manier, maar daarvoor zou ik de code moeten zien.
Het tweede probleem: verdwijnende rapporten, lijkt mij ernstiger. Nooit van gehoord ook, dat een rapport verdwijnt als je het mailt. Dan zou ik in ieder geval eerst een kopie van het rapport maken, zodat je die daarna makkelijk kunt vervangen. Maar als een rapport verdwijnt in Access, zul je daar ergens een commando voor moeten geven, want dat mag natuurlijk nooit spontaan gebeuren. Ook hiervoor geldt: zonder code kan ik uiteraard nooit zien wat er gebeurt en wat er fout gaat.
 
Onderstaande de code, die ik ooit hier op dit forum heb gevonden en aangepast.

Code:
Private Sub btnMail_Click()
Me.Refresh
Dim folder As String
Dim sNaam_Ori As String, sNieuw As String
Dim strWhere As String
    On Error GoTo errHandler
 'Namen vastleggen en rapport hernoemen
    sNaam_Ori = "rptFactuur"
    sNieuw = "Factuur FlipperPeter " & [FactNr]
    DoCmd.Rename sNieuw, acReport, sNaam_Ori
    strWhere = "[FactNr] = '" & Me.FactNr & "'"
folder = [pad]
DoCmd.OpenReport sNieuw, acPreview, "", strWhere, acHidden
'Sla factuur op als pdf
DoCmd.OutputTo acOutputReport, sNieuw, acFormatPDF, folder & "Factuur FlipperPeter.nl " & [FactNr] & ".pdf", True
'Verzend factuur
'DoCmd.SendObject acReport, sNieuw, acFormatPDF, Me.Mail, "", "", "Factuur FlipperPeter.nl " & Me.FactNr, "Beste " & [Voornaam] & "," & vbCrLf & vbCrLf & "In de bijlage de factuur ...", True, ""
'rapport hernoemen naar oorspronkelijke naam
    DoCmd.Close acReport, sNieuw
    DoCmd.Rename sNaam_Ori, acReport, sNieuw
    Exit Sub
errHandler:
    If Err.Number = 2501 Then MsgBox "Er ging iets fout..."
    DoCmd.Close acReport, sNieuw
End Sub


Het rapport wordt hernoemd en na verzenden weer op de oorspronkelijke naam gezet. Ik heb idd altijd een kopie die ik weer terug kan zetten. Dit heeft tot de update vorige week eigenlijk altijd perfekt gewerkt

Ik heb het verzenden van de mail (DoCmd.SendObject acReport etc..) nu inactief gezet, om het niet hernoemen van het rapport te vermijden. En een gedeelte van de tekst, die normaal in de mail gezet wordt, nu ook uit de code gehaald.

Ik krijg trouwens geen foutmelding, was eerder wel als ik bijv de mail per ongeluk niet verzond
 
Laatst bewerkt:
Ik vind de constructie met het openen van het rapport erg onhandig; doe ik dus nooit. Ik vind het vele malen handiger, sneller en veiliger om de onderliggende query aan te passen, en het rapport gelijk te exporteren naar PDF. Mailen met SendObject zou nog steeds moeten werken, maar als je Outlook gebruikt, of op de pc hebt, kun je dat ook prima gebruiken om de mail te versturen. Dan heb je ook veel meer mogelijkheden dan je nu hebt met SendObject.
Maar ik zou dus vooral kijken naar de manier waarop je het rapport gebruikt.
En met DoCmd.CopyObject , sNieuw, acReport, "rptFactuur" maak je een kopie van je bestaande rapport, zonder dat je het aan het bestaande rapport hoeft te morrelen. Lijkt mij ook een pré!
 
Met DoCmd.CopyObject maak je dus een kopie van het rapport en dat sla je op in de database? Hierna kun je mbv VBA betreffende rapport weer aanroepen, waarna je het rapport automatisch als pdf op kunt slaan in de juiste map op dezelfde manier als eerst met origineel?
Krijg je dan op den duur niet een lading rapporten in de db. Ik kan die wel gemakkelijk verwijderen, maar dat zou toch eigenlijk niet moeten hoeven?

Code:
Private Sub btnMail_Click()
Me.Refresh Dim folder As String
Dim sNaam_Ori As String, sNieuw As String
Dim strWhere As String
    On Error GoTo errHandler
 'Namen vastleggen en rapport kopieren
    sNaam_Ori = "rptFactuur"
    sNieuw = "Factuur FlipperPeter " & [FactNr]
       strWhere = "[FactNr] = '" & Me.FactNr & "'"
folder = [pad]
DoCmd.CopyObject , sNieuw, acReport, "rptFactuur"
'Sla factuur op als pdf
DoCmd.OutputTo acOutputReport, sNieuw, acFormatPDF, folder & "Factuur FlipperPeter.nl " & [FactNr] & ".pdf", True
'Verzend factuur
DoCmd.SendObject acReport, sNieuw, acFormatPDF, Me.Mail, "", "", "Factuur FlipperPeter.nl " & Me.FactNr, "Beste " & [Voornaam] & "," & vbCrLf & vbCrLf & "In de bijlage de factuur ...", True, ""

    Exit Sub
errHandler:
    If Err.Number = 2501 Then MsgBox "Er ging iets fout..."
    DoCmd.Close acReport, sNieuw
End Sub
DoCmd.CopyObject , sNieuw, acReport, "rptFactuur"

Ik gebruik outlook, maar ik begrijp uit je antwoord dat ik dat dan op een andere manier moet openen?

Ik vond dit
Code:
Public Function CreateEmailWithOutlook( _
    MessageTo As String, _
    Subject As String, _
    MessageBody As String)

    ' Define app variable and get Outlook using the "New" keyword
    Dim olApp As New Outlook.Application
    Dim olMailItem As Outlook.MailItem  ' An Outlook Mail item

    ' Create a new email object
    Set olMailItem = olApp.CreateItem(olMailItem)

    ' Add the To/Subject/Body to the message and display the message
    With olMailItem
        .To = Me.mail
        .Subject = Factuur FlipperPeter.nl " & Me.FactNr
        .Body = "Beste " & [Voornaam] & "," & vbCrLf & vbCrLf & "In de bijlage de factuur ..."
        .Display    ' To show the email message to the user
    End With

    ' Release all object variables
    Set olMailItem = Nothing
    Set olApp = Nothing

End Function

Waar zou ik hier het rapport snieuw dan als bijlage moeten plaatsen?
 
Met mijn methode (de onderliggende query aanpassen) kun je zonder het rapport te openen een pdf maken. De naam van die pdf is in mijn ogen totaal niet interessant; je stuurt hem tenslotte naar een klant/persoon op via de mail. Hoe die het rapport verder noemt/opslaat, lijkt mij een zaak voor de ontvanger. Dus als ik zo'n routine zou maken, zou de naam van de pdf mij totaal niet interesseren. Ik zou dus een standaardnaam gebruiken. Na opslaan en mailen, gooi je het tijdelijke pdf bestand toch weg met Kill. Geen noodzaak om het te bewaren lijkt mij. Wil je dat toch, gebruik dan het Name commando van Windows om het rapport een andere naam te geven, of FileCopy. Of iets van die aard. Access gaat een beetje lastig om met het opslaan van kopieën van rapporten binnen de applicatie zelf, en dat is ook helemaal niet nodig. Het enige dat van belang is, is dat de recordset klopt. En dat doet hij niet als je een filter gebruikt, want dan krijg je het totale rapport. Vandaar dat ik (met een QueryDef) de query aanpas.
De rest is dan simpel.
Die functie werkt zo alleen als je hem op het formulier zelf gebruikt; wil je hem ook op andere formulieren gebruiken, dan moet je hem wat anders opstellen.
 
Hallo Michel. Bedankt voor je reactie maar dat gaat me helaas toch mijn petje te boven. Zoveel kennis van VBA heb ik nu ook weer niet.
Ik gebruik een query om het rapport te openen op het formulier.
Met een code die veel lijkt op de 2e in mijn vorige bericht open ik nu outlook en het werkt zelfs sneller dan eerst.
De factuur die ik in een map op mijn pc heb opgeslagen komt in de bijlage. Ik heb alles nu onder een knop automatisch werkend: opslaan- printen en mailen. Werkt goed, er zal ongetwijfeld een betere code zijn, maar zoals ik al zei. Dat ging me de pet te boven.
Om andere evt. verder te helpen hier toch nog een keer de code zoals die nu voor me werkt.

Code:
Private Sub btnPrintMail_Click()
Me.Refresh

Dim folder As String
Dim sNaam_Ori As String, sNieuw As String
Dim strWhere As String
    On Error GoTo errHandler
 'Namen vastleggen en rapport hernoemen
    sNaam_Ori = "rptFactuur"
    sNieuw = "Factuur FlipperPeter " & [FactNr]
    DoCmd.Rename sNieuw, acReport, sNaam_Ori
    strWhere = "[FactNr] = '" & Me.FactNr & "'"
folder = [pad]

'Sla factuur op als pdf
DoCmd.OpenReport sNieuw, acPreview, "", strWhere, acHidden
DoCmd.OutputTo acOutputReport, sNieuw, acFormatPDF, folder & "Factuur FlipperPeter.nl " & [FactNr] & ".pdf", True

'Print factuur automatisch
DoCmd.OpenReport sNieuw, , "", strWhere, acHidden

'Verzend factuur
Dim OutApp As Object
Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon
    Set OutMail = OutApp.CreateItem(0)
    ' Add the To/Subject/Body to the message and display the message
    With OutMail
    .To = Me.Mail
    .Subject = "Factuur FlipperPeter.nl " & Me.FactNr
    .Body = "Beste " & [Voornaam] & "," & vbCrLf & vbCrLf & "In de bijlage de factuur voor de reparatie van de " & [Notities] & "." & vbCrLf & "Veel plezier met de flipperkast! "
    .Attachments.Add "D\\01.Facturen\Factuur  " & [FactNr] & ".pdf" 'De locatie van de bijlage
    .Display ' To show the email message to the user
    End With

    ' Release all object variables
    Set OutMail = Nothing
    Set OutApp = Nothing
    
'rapport hernoemen naar oorspronkelijke naam
    DoCmd.Close acReport, sNieuw
    DoCmd.Rename sNaam_Ori, acReport, sNieuw
    Exit Sub
    
errHandler:
    If Err.Number = 2501 Then MsgBox "Er ging iets fout..."
    DoCmd.Close acReport, sNieuw
    
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan