• 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.

excel maakt een .pdf, deze pdf moet worden gemaild; kan dat?

Status
Niet open voor verdere reacties.

boppe

Gebruiker
Lid geworden
26 aug 2010
Berichten
69
Mijn excel formulier maakt steeds een unieke naam (datum+serienummer+postcode+huisnr) aan en wordt opgeslagen als een pdf file.
Nu willen we eigenlijk dat VBA deze PDF file ook automatisch gaat e-mailen.

Er bestaan scriptjes om te mailen, maar dat is de excelfile zelf, we willen dus de gegenereerde pdf mailen.


Kan zoiets wel?



PHP:
Sub OpslaanAlsPdf()
'met controle

Dim Pad As String
   Dim Bestandsnaam As String
   Pad = ActiveWorkbook.Path + "\"
   Dim Sysdate
   Sysdate = Format(Date, "yyyy/mm/dd")
   Bestandsnaam = "WMA_" & Sysdate & "_" & Replace(Replace(Replace(Replace(Range("C2") & "_snr_" & Range("C4").Value, "\", "-"), "/", "-"), ",", "-"), "&", "-")
   Bestandsnaam = Join(Split(Bestandsnaam, ":"))
   

   If Not Dir(Pad & Bestandsnaam & ".pdf") = Empty Then
       If MsgBox("Het bestand " & Bestandsnaam & " bestaat al in " & vbCrLf & Pad & vbCrLf & "Wil je dit bestand overschrijven?", vbExclamation + vbOKCancel, "LET  OP !!  Bestand bestaat al!") = vbCancel Then Exit Sub
   End If
   
   If Range("C2") = Empty Then
       If MsgBox("Er is geen postcode + nr ingevuld. Hierdoor kan dit bestand niet worden opgeslagen.", vbExclamation + vbCritical, "LET  OP !!  Bestand kan niet worden opgeslagen!") = vbOK Then Exit Sub
   End If
   
   If Range("C4") = Empty Then
    If MsgBox("Er is geen serienummer ingevuld. Hierdoor kan dit bestand niet worden opgeslagen.", vbExclamation + vbCritical, "LET  OP !!  Bestand kan niet worden opgeslagen!") = vbOK Then Exit Sub
   End If
   
   If Range("W25") = Empty Then
       If MsgBox("Er is nog geen conclusie ingevuld. Maak een keuze tussen 'A', 'B', 'C' of 'D' en kies dan opnieuw Opslaan (PDF).", vbExclamation + vbCritical, "LET  OP !!  Bestand kan niet worden opgeslagen!") = vbOK Then Exit Sub
   
  
    
    Else

With Sheets("Blad1")
  .PageSetup.Orientation = xlLandscape
  .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Pad + Bestandsnaam, Quality:=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End With
End If
End Sub
 
hierbij de code om te mailen met outlook.
in onderstaande regel staat het pad naar de pdf file
.Attachments.Add (Range("T2").Value & "" & Range("G4").Value & "_" & Range("A10").Value & ".pdf")



Code:
Sub Mail_workbook_Outlook()

    Dim OutApp As Object
    Dim OutMail As Object
On Error GoTo getout
If Range("V6") = 0 Then
MsgBox ("U moet eerst updaten voordat u kunt mailen!!")
Exit Sub
End If
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    'On Error Resume Next
    With OutMail
        .To = Range("G8").Value
        .CC = ""
        .BCC = ""
        .Subject = "Hierbij uw factuur"
        .Body = "Geachte " & Range("A10").Value & vbCrLf & vbCrLf & "Hierbij uw factuur met nr: " & Range("G4").Value _
        & vbCrLf & "Het totaal bedrag van deze factuur is: " & Range("G39").Value & " Euro" & vbCrLf & vbCrLf & "Met vriendelijke groet: " & Range("A1").Value & vbCrLf
        
        .Attachments.Add (Range("T2").Value & "\" & Range("G4").Value & "_" & Range("A10").Value & ".pdf")
        .display 'or use .Display
        ''.Send   'or use .Display
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
    MsgBox ("E-mail verzonden")
    Exit Sub
getout:
    MsgBox ("Er is een fout opgetreden is er wel een geldig e-mail adres ingevuld? En staat outlook op de computer? Zijn de bestandspaden wel juist?")
End Sub
 
@boppe:

Als ik zo naar je code kijk ben ik wel heel erg benieuwd wat er eigenlijk in C2 en C4 staat.
Ik wil dus eigenlijk weten waar al die replace, join en split opdrachten voor nodig zijn.
 
Laatst bewerkt:
@boppe:

Als ik zo naar je code kijk ben ik wel heel erg benieuwd wat er eigenlijk in C2 en C4 staat.
Ik wil dus eigenlijk weten waar al die replace, join en split opdrachten voor nodig zijn.

C2 veld: postcode + huisnummer
C4 veld: serienummer

Omdat het programma een bestand maakt met oa deze variabelen, mag er dus geen vreemde tekens in zitten als een \, /,& etc.
 
Als je postcode en huisnummer in 2 cellen doet kan je het met 2 simpele functies af en heb je die ingewikkelde dingen niet nodig.
Daarnaast zijn er nog wel meer tekens die niet in een map of bestandsnaam voor mogen komen.
 
ik gebruik altijd dit stukje code om ongeldige tekens uit een bestandsnaam te filteren.
Code:
Dim Myarray As Variant
Dim x As Variant
    
Myarray = Array("<", ":", ">", "|", "/", "*", "\", "?", """")
    For x = LBound(Myarray) To UBound(Myarray)
        Filename = Replace(Filename, Myarray(x), "", 1)
    Next x
waarbij de variable filename verwijst naar <bestandsnaam.pdf>

wellicht helpt dit.
Tevens benieuwd of dit de meest elegante oplossing is...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan