Bij het laatste bericht staat niets vermeld.
Ik heb het opgegeven voorbeeld toegepast en heb daarbij een fout in de code gemaakt. Voorafgaande aan de regel SendUsingAccount = OutApp.Session.Accounts.Item(2) moet een punt staan, dus .SendUsingAccount = OutApp.Session.Accounts.Item(2). Sorry voor de verwarring maar nu werkt het voorbeeld van "rondebruin" goed. Ik heb wel beide aangegeven subroutines onder knop gezet zodat deze gemakkelijk zijn uit te voeren om te testen.
De eerste subroutine (knop946) bepaalt het accountnummer (eenmalig voor de bepaling en is daarna niet meer nodig) en de tweede routine (knop947) verzendt de e-mail met de bijlage Werkorder.pdf.
Test Sub routines:
Code:
Private Sub Knop946_Click() 'Welk accountnummer
Dim OutApp As Outlook.Application
Dim I As Long
Set OutApp = CreateObject("Outlook.Application")
For I = 1 To OutApp.Session.Accounts.Count
'MssgBox OutApp.Session.Accounts.Item(I) & ": This is a account number " & I
'Next I
End Sub
Code:
Private Sub Knop947_Click() 'E-mail met bijlage
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
strbody = "Hallo" & Chr(13) & Chr(10) & _
"Dit is regel 1"
On Error Resume Next
Me.Dirty = False
Dim sNaam As String, adrsNaam As String, nrNaam As String, plsNaam As String
DoCmd.OpenReport "Rport Werkorders", acViewPreview, , "[o_Opdracht ID]= " & Me.[o_Opdracht ID]
sNaam = [o_Werknummer]
adrsNaam = [o_Adres]
nrNaam = [o_Huisnummer]
plsNaam = [o_Plaats]
Path = "D:\Werkorder" & ".pdf"
Dim strLocation As String
DoCmd.OutputTo acOutputReport, "Rport Werkorders", acFormatPDF, Path, False
DoCmd.Close acReport, "Rport Werkorders", acSaveNo
With OutMail
.SendUsingAccount = OutApp.Session.Accounts.Item(2)
.To = ""
.CC = ""
.BCC = ""
.Subject = "Dit is het onderwerp"
.Body = strbody
.Attachments.Add Path
.Display
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
<<<Ik zou graag nog een verbetering willen. In de regel DoCmd.OutputTo acOutputReport, . . . . . wordt het rapport Werkorder als pdf (onnodig) opgeslagen op de D schijf. Hoe zou ik deze stap over kunnen slaan, dus geen opslag van een dummy. Er is dan geen pad (Path) en een dummy bestand (Werkorder.pdf) meer nodig.>>>
Inmiddels, een dag later, is een vervelende situatie ontstaan. De sub e-mail werkte naar tevredenheid op de bovenstaande vraag na. Bij het testen en wijzigen is mijn Rapport Werkorders verdwenen en heb een kopie van de FE tav. e-mail code opnieuw moeten aanmaken. Nu ontstaat in de nieuwe situatie met dezelfde code, bij het e-mail verzenden een foutmelding in de regel <Dim OutApp As Outlook.Aplication>, Foutmelding: "Een door de gebruiker gedefinieerde gegevenstype is niet gedefinieerd". Dit zou te maken kunnen hebben met de Outlook Object Library (Outlook) . Deze heb ik bij Verwijzingen aangevinkt maar ondanks toch deze foutmelding.
Als ik deze regel uitschakel, gaat alles weer naar wens en kan ik e-mail verzenden maar dan is in de code sprake van Late Binding wat ik niet wil.
<<<Er wordt ook weer een e-mail verzonden vanuit account 1 ipv. account 2, waar het allemaal om begonnen is (.SendUsingAccount = OutApp.Session.Accounts.Item(2))>>>
Ik heb dus de library nodig voor Early Binding om vanuit account 2 (anders dan default) te kunnen mailen. De library is ingeschakeld maar VBA lijkt het niet
meer te vinden. Het bestand MSOUT.OLB is aanwezig. Vanuit de Library krijg ik geen foutmelding. Ik heb zelfs Office 2016 opnieuw uitgebreid hersteld maar ook dat helpt niet. Bij Opties, vertrouwenscentrum staan de macro's op toegestaan. Help, het was zo mooi maar krijg het niet meer aan de praat.