Opgelost .Attachments.Add

Dit topic is als opgelost gemarkeerd

Sabphi

Gebruiker
Lid geworden
29 aug 2012
Berichten
21
Besturingssysteem
Windows 11
Office versie
Office 2021
Hallo,

Eerst had ik deze gemaakt om naar een PDF af te drukken wat lukte. Nu wil ik de PDF file verzenden via mail ook. Dit lukt tot heden niet.
Alles werkt tot ik de .Attachments.Add PDFNaam aan zet. Dan zie ik dat hij het bestand niet vind terwijl hij op mijn PC Staat.
Vergeet ik iets
Ik gebruik hiervoor Excel van Office 2021 onder windows 11.


Code:
Private Sub CMD_Print_Click()
    Dim naam As String
    Dim Nummer As String
    Dim Antwoord As String
    Dim OutApp As Object
    Dim OutMail As Object
    Dim PDFNaam As String
    Dim strbody As String
    
    If Worksheets("Bestelbon").Range("F6").Value = "" Then GoTo Melding
        
    naam = Worksheets("Bestelbon").Range("F6").Value
    Nummer = Worksheets("Bestelbon").Range("G11").Value
    PDFNaam = "C:\Users\plltp\Documents\Blauwe Wimpel\Kledij\Bestellingen\2027\" & Nummer & " " & naam

    
    ' Exporteer naar PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:="C:\Users\plltp\Documents\Blauwe Wimpel\Kledij\Bestellingen\2027\" & Nummer & " " & naam, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False 'Zet op True om de PDF direct te openen, False indien niet openen
        
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
            strbody = "Beste" & vbNewLine & vbNewLine & _
              "Uw bestelbon vind u terug in de bijlage " & Nummer & " " & naam & vbNewLine & _
              " " & vbNewLine & _
              "Met vriendelijke groet" & vbNewLine & _
              "Het bestuur"

            With OutMail
                .To = Range("F9")
                .CC = ""
                .BCC = ""
                .Subject = "Uw bestelbon"
                .Body = strbody
                '.Attachments.Add PDFNaam
                .Display 'Of gebruik .Send om direct te verzenden
            End With

    Set OutMail = Nothing
    Set OutApp = Nothing
    
    Worksheets("Bestelbon").Range("G11").Value = Worksheets("Bestelbon").Range("G11") + 1
    Worksheets("Bestelbon").Range("F6").Value = ""
    Worksheets("Bestelbon").Range("B19:C24") = ""

    GoTo Einde
    
Melding:
        Antwoord = MsgBox("Er is geen lid geselecteerd", vbvbCritical, "FOUT")
Einde:
End Sub
 
Volgens Claude.

Het probleem is duidelijk: de PDF-bestandsnaam mist de .pdf extensie! Excel voegt die niet automatisch toe bij ExportAsFixedFormat.
De fout: PDFNaam eindigt op ...\ & Nummer & " " & naam — zonder .pdf
Outlook zoekt dan een bestand dat niet bestaat (want het echte bestand heet 123 Jan Jansen.pdf).

Gecorrigeerde code:

Code:
Private Sub CMD_Print_Click()
    Dim naam As String
    Dim Nummer As String
    Dim Antwoord As String
    Dim OutApp As Object
    Dim OutMail As Object
    Dim PDFNaam As String
    Dim strbody As String
    
    If Worksheets("Bestelbon").Range("F6").Value = "" Then GoTo Melding
    
    naam = Worksheets("Bestelbon").Range("F6").Value
    Nummer = Worksheets("Bestelbon").Range("G11").Value
    
    ' PDFNaam MET .pdf extensie
    PDFNaam = "C:\Users\plltp\Documents\Blauwe Wimpel\Kledij\Bestellingen\2027\" & Nummer & " " & naam & ".pdf"
    
    ' Exporteer naar PDF (Filename zonder .pdf - Excel voegt het zelf toe)
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=PDFNaam, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    
    strbody = "Beste" & vbNewLine & vbNewLine & _
              "Uw bestelbon vind u terug in de bijlage." & vbNewLine & _
              " " & vbNewLine & _
              "Met vriendelijke groet" & vbNewLine & _
              "Het bestuur"
    
    With OutMail
        .To = Worksheets("Bestelbon").Range("F9").Value
        .CC = ""
        .BCC = ""
        .Subject = "Uw bestelbon"
        .Body = strbody
        .Attachments.Add PDFNaam  ' Werkt nu omdat .pdf erbij staat
        .Display  ' Of .Send om direct te verzenden
    End With
    
    Set OutMail = Nothing
    Set OutApp = Nothing
    
    Worksheets("Bestelbon").Range("G11").Value = Worksheets("Bestelbon").Range("G11") + 1
    Worksheets("Bestelbon").Range("F6").Value = ""
    Worksheets("Bestelbon").Range("B19:C24") = ""
    
    GoTo Einde

Melding:
    Antwoord = MsgBox("Er is geen lid geselecteerd", vbCritical, "FOUT")
Einde:
End Sub
 
Dag Claude,

Dit is inderdaad de oplossing. Nu werkt het.

Bedankt voor deze,
Met wat schaamrood op de wangen,
:)
 
Het is overduidelijk AI-code en geen HI-code.
Het printgedeelte komt van Helpmij die ik destijds in 2015 opmaakte. Het mailgedeelte komt van Google AI-overzicht inderdaad.
Voor mij is dit wel genoeg, zolang het doet wat ik verlang.
Tips zijn steeds welkom, je bent nooit te oud om te leren.
 
Bijvoorbeeld:

Code:
Private Sub CMD_Print_Click()
  If Cells(6, 6) <> "" Then
    c01 = Cells(6,6) & " " & Cells(11,7)
    c00 = "C:\Users\plltp\Documents\Blauwe Wimpel\Kledij\Bestellingen\2027\" & c01 & ".pdf"
   
    ActiveSheet.ExportAsFixedFormat 0, c00
           
    With CreateObject("Outlook.Application").CreateItem(0)
        .To = Cells(9, 6)
        .Subject = "Uw bestelbon"
        .Body = Replace("Beste||Uw bestelbon vindt u terug in de bijlage " & c01 & "| |Met vriendelijke groet|Het bestuur", "|", vbLf)
        .Attachments.Add c00
        .Send
    End With
   
    Cells(11, 7) = Cells(11, 7) + 1
    Range("G11,F6,B19:C24").ClearContents
  End If
End Sub

Hoe simpeler de code, hoe eenvoudiger omisssies (en taalfouten) worden herkend.
 
Ik krijg wel een error voor: Range("F6,B19:C24").ClearContents
G11 heb ik eruit gehaald deze mag niet leeg zijn omdat ik er één bij optel in de stap ervoor.
Bericht automatisch samengevoegd:

Ik krijg wel een error voor: Range("F6,B19:C24").ClearContents
G11 heb ik eruit gehaald deze mag niet leeg zijn omdat ik er één bij optel in de stap ervoor.
Maar met Range("F6,B19:C24").Value = "" lukt het wel.
Toch bedankt voor deze les, ga er nog wat dieper op ingaan om zo in andere bestanden ook modern te werken.
 
Laatst bewerkt:
Kzou niet weten waarom

Code:
Sub M_snb()
    Range("F6,B19:C24").ClearContents
End Sub

niet funktioneert. Hier in ieder geval wel. De knop staat gewoon in het aktieve werkblad, veronderstel ik.
Je hebt toch wel een komma geplaatst tussen de 2 afzonderlijke gebieden ?
 
Kzou niet weten waarom

Code:
Sub M_snb()
    Range("F6,B19:C24").ClearContents
End Sub

niet funktioneert. Hier in ieder geval wel. De knop staat gewoon in het aktieve werkblad, veronderstel ik.
Je hebt toch wel een komma geplaatst tussen de 2 afzonderlijke gebieden ?
De knop staat inderdaad op hetzelfde werkblad en Ja, want ik heb de ganse uitwerking gekopieerd en geplakt. Ook dubbel gecheckt naar de schrijfwijze.
Het enige dat ik gewijzigd heb is de .Display ipv .Send.
Ook de celbeveiliging in twee gevallen getest idem error in beide gevallen.
 
Als je zegt een error melding te krijgen, vertel er dan ook bij welke dat precies is.
 
Lijkt me duidelijk.
Die bereiken bevatten 1 of meer samengevoegde cellen.
Dat is vloeken in de kerk in VBA.
 
Laatst bewerkt:
Terug
Bovenaan Onderaan