• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Mail versturen vanuit Excel

Obrecht

Gebruiker
Lid geworden
9 jan 2025
Berichten
139
Met behulp van AI heb ik onderstaande vba gemaakt.
Maar waar zit de fout Ik zie namelijk niet de mail.
Uiteraard zijn de mailadressen hier fictief.
  • Exporteert het tabblad "Aangepast Rijschema" naar een tijdelijke PDF in de Windows Temp-map.
  • Verwijdert eerst een eventuele oude versie van die PDF.
  • Start Outlook of maakt een Outlook-sessie aan als deze nog niet geopend is.
  • Maakt een nieuwe e-mail aan.
  • Zet vaste ontvangers in Aan en CC.
  • Vult automatisch het onderwerp en de begeleidende tekst in.
  • Voegt de aangemaakte PDF als bijlage toe.
  • Opent de e-mail ter controle met .Display.
  • Verstuurt de mail niet automatisch omdat .Send is uitgeschakeld.


Public Sub Mail()

Dim ws As Worksheet
Dim PdfBestand As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim TijdelijkeMap As String

Set ws = Worksheets("Aangepast Rijschema")

'Tijdelijke PDF-locatie bepalen
TijdelijkeMap = Environ$("TEMP") & "\"
PdfBestand = TijdelijkeMap & "Aangepast_Rijschema.pdf"

'Oud bestand verwijderen indien aanwezig
If Dir(PdfBestand) <> "" Then Kill PdfBestand

'Tabblad exporteren naar PDF
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=PdfBestand, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

'Outlook starten
On Error Resume Next
Set OutlookApp = GetObject(, "Outlook.Application")

If OutlookApp Is Nothing Then
Set OutlookApp = CreateObject("Outlook.Application")
End If
On Error GoTo 0

If OutlookApp Is Nothing Then
MsgBox "Outlook kon niet worden gestart.", vbExclamation
Exit Sub
End If

'E-mail opstellen
Set OutlookMail = OutlookApp.CreateItem(0)

With OutlookMail

.To = Albert1@temp.nl& _
" Albert6@temp.nl;"

.CC = " Albert2@temp.nl;" & _
" Albert3@temp.nl;" & _
" Albert4@temp.nl;" & _
" Albert5@temp.nl"

.Subject = "Aangepast Rijschema"

.Body = _
"Dit zijn de aanpassingen op het standaard Rijschema" & vbCrLf & _
"voor de komende 40 werkdagen." & vbCrLf & vbCrLf & _
"Deze mail vervangt alle eerdere aanpassingen."

.Attachments.Add PdfBestand

'Versturen
'.Send
.Display

'Gebruik eventueel .Display in plaats van .Send
'als je de mail eerst wilt controleren

End With

Set OutlookMail = Nothing
Set OutlookApp = Nothing


End Sub
 
WHAAAAAAAAA daar heb ik echt helemaal overheen gekeken.
Controle:
Met de originele adressen staat het wel goed helaas.
Toch krijg ik geen voorbeeld ondanks .Display
en staat er ook geen .pdf in de Temp map.
 
Wel, soms vertrouw ik mezelf. Dat was hier ook het geval, maar nu heb je me toch aan het twijfelen gebracht, en dus heb ik het geprobeerd, en ja hoor, het gaat prima, ook "Display" en de opgeslagen pdf.
Ga anders eens met F8 door je code en hou nauwkeurig in de gaten wat er allemaal gebeurt. Zet daarbij best ook "Venster lokale variabelen" open.
 
Zet je code hier in codetags, dat maakt het een stuk leesbaarder.
Daarbij is dit ruim voldoende:
Code:
Public Sub Mail()
    Set ws = Worksheets("Aangepast Rijschema")
   
    'Tijdelijke PDF-locatie bepalen
    TijdelijkeMap = Environ("TEMP") & "\"
    PdfBestand = TijdelijkeMap & "Aangepast_Rijschema.pdf"
   
    'Oud bestand verwijderen indien aanwezig
    If Dir(PdfBestand) <> "" Then Kill PdfBestand
   
    'Tabblad exporteren naar PDF
    ws.ExportAsFixedFormat 0, PdfBestand
   
    'Outlook starten
    On Error Resume Next
    Set OutlookApp = GetObject(, "Outlook.Application")
   
    If OutlookApp Is Nothing Then
        Set OutlookApp = CreateObject("Outlook.Application")
    End If
    On Error GoTo 0
   
    If OutlookApp Is Nothing Then
        MsgBox "Outlook kon niet worden gestart.", vbExclamation
        Exit Sub
    End If
   
    'E-mail opstellen
    Set OutlookMail = OutlookApp.CreateItem(0)
    With OutlookMail
    .To = "Albert1@temp.nl;Albert6@temp.nl"
    .CC = "Albert2@temp.nl;" & _
    "Albert3@temp.nl;" & _
    "Albert4@temp.nl;" & _
    "Albert5@temp.nl"
    .Subject = "Aangepast Rijschema"
    .Body = _
    "Dit zijn de aanpassingen op het standaard Rijschema" & vbCrLf & _
    "voor de komende 40 werkdagen." & vbCrLf & vbCrLf & _
    "Deze mail vervangt alle eerdere aanpassingen."
    .Attachments.Add PdfBestand
   
    'Versturen
    '.Send
    .Display
   
    'Gebruik eventueel .Display in plaats van .Send
    'als je de mail eerst wilt controleren
    End With
   
    Set OutlookMail = Nothing
    Set OutlookApp = Nothing
End Sub
 
Terug
Bovenaan Onderaan