Word document opslaan als PDF en mailen

Status
Niet open voor verdere reacties.

maomanna

Gebruiker
Lid geworden
20 feb 2014
Berichten
234
ik heb een wordformulier die na invullen met 1 druk op de knop wordt opgeslagen (tijdelijke map oid) en wordt gemaild naar een standaard emailadres.

Op dit moment heb ik deze code, waarbij hij nog steeds het .docm document meestuurt.

Code:
Private Sub Verstuur_Click()
Dim olkApp As Object
Dim strSubject As String
Dim strTo As String
Dim strBody As String
Dim strAtt As String

    strSubject = "Aanmelding indiensttreding"
    strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding"
    strTo = "hierhet@email.nl"
    If ActiveDocument.FullName = "" Then
'
' Silent Save_to_PDF Macro
'
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        Replace(ActiveDocument.FullName, ".docm", ".pdf"), _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, Item:= _
        wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False

    End If
    strAtt = ActiveDocument.FullName
    
    Set olkApp = CreateObject("outlook.application")
    With olkApp.CreateItem(0)
        .To = strTo
        .Subject = strSubject
        .Body = strBody
        .Attachments.Add strAtt
        .Send
        '.Display
    End With
    Set olkApp = Nothing
End Sub

Geen idee hoe ik er nu voor kan zorgen dat hij de PDF meestuurt.
De PDF omzet code werkt los prima, maar in deze setting niet.

Het mailen werkt verder prima.

Hoe kan ik dit oplossen?
 
Toch is de oplossing niet zo moeilijk; je hebt een document en dat heeft een naam. Die naam lees je uit met FullName. Vervolgens maak je een pdf van dat bestand, waarbij je (logisch) de extensie pdf gebruikt. Of dat nodig is weet ik trouwens niet eens; een pdf heeft altijd al de extensie pdf. Maar goed, dat staat hier los van.
Vervolgens ga je een bestand mailen, en wat mail je? het document met de naam Fullname! En dat is? Inderdaad, je Word document. Ik zou een extra variabele toevoegen die de naam van de pdf heeft. En die gebruiken bij de mail. Krijg je zoiets:
Code:
    docPDF = Replace(ActiveDocument.FullName, ".docm", ".pdf")
    ActiveDocument.ExportAsFixedFormat OutputFileName:= docPDF, _ 
...
    strAtt = docPDF
 
Het gaat een stuk beter, alleen geeft hij aan dat docPDF een leeg document is/niet bestaat.

Hij schrijft dus niks weg.
 
Ik weet natuurlijk niet wat je in docPDF hebt staan. Misschien moet je dat even checken met een msgbox.
 
Pas dit eens aan

Code:
If ActiveDocument.FullName [COLOR="#FF0000"]<>[/COLOR] "" Then
 
Krijg de foutmelding 5,
Ongeldige procedure aanroep of ongeldig argument.

Hij hangt op
Code:
.Attachments.Add strAtt = DocPDF

Edit.

Gefixt.

Het moet zijn:
Code:
Private Sub CommandButton1_Click()
Dim olkApp As Object
Dim strSubject As String
Dim strTo As String
Dim strBody As String
Dim strAtt As String

    strSubject = "Aanmelding indiensttreding"
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding"
    strTo = "hierje@email.nl"
If ActiveDocument.FullName <> "" Then
'
'Silent Save_to_PDF Macro
'
        DocPDF = Replace(ActiveDocument.FullName, ".docm", ".pdf")
        ActiveDocument.ExportAsFixedFormat OutputFileName:=DocPDF, _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, Item:= _
        wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    End If
    strAtt = DocPDF
    
    Set olkApp = CreateObject("outlook.application")
    With olkApp.CreateItem(0)
        .To = strTo
        .Subject = strSubject
        .Body = strBody
        .Attachments.Add strAtt
        .Send
        '.Display
    End With
   Set olkApp = Nothing
End Sub

Dank jullie wel!

Edit2:
In de userform vul ik een veld in, hoe kan ik deze variabele in het onderwerp laten plaatsen?
 
Laatst bewerkt:
In de userform vul ik een veld in, hoe kan ik deze variabele in het onderwerp laten plaatsen?
Die code staat er toch nu?
Code:
        .Subject = strSubject
 
en om ze ergens aan te roepen, is dat hetzelfde als in het worddocument?

ik ga het eens proberen.
 
Je hebt het toch over een formulier? Of bedoel je het Word document als formulier, en niet een UserForm? Soms word dat erg verwarrend :).
 
In het userform vul ik een textbox in. De inhoud van txtwnnaam wil ik terug laten komen en het documentnaam en in de mail die wordt verzonden.
 
Je vult het subject nu hard gecodeerd:
Code:
    strSubject = "Aanmelding indiensttreding"
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding"
        .Subject = strSubject
        .Body = strBody
Als je de teksten invult op je formulier, dan heb je die variabelen niet nodig en kun je de tekst gelijk van het formulier aftrekken.
Code:
        .Subject = Me.txtOnderwerp
        .Body = Me.txtBericht
Of welke namen je tekstvakken ook hebben :).
 
Is dit te combineren met hardcoded tekst?

dus iets als:

Code:
strSubject = "Aanmelding indiensttreding van Me.txtNaam"
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding. De naam is Me.txtNaam"
        .Subject = strSubject
        .Body = strBody
 
Jawel, maar niet zo :)
Code:
strSubject = "Aanmelding indiensttreding van " & Me.txtNaam
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding. De naam is " & Me.txtNaam
        .Subject = strSubject
        .Body = strBody
 
Die werkt!

nog een leuke vraag.
Als ik een commandobutton maak met daarachter de code om te versturen, krijg ik het niet ingevulde document in PDF.
waarschijnlijk zit het dat het userform de ingevulde velden nog niet heeft doorgespeeld naar het word-document (wordt gedaan met de OK knop).

kan ik de verzendcode gewoon onder de OK code plakken?
 
En het was zo'n simpel antwoord geweest :). Ja namelijk. Zorg er eerst voor dat je document compleet is, en vermoedelijk opgeslagen. Dus ook nog een Save opdracht in de knop zetten voordat je exporteert.
 
heb zitten stoeien met
ActiveDocument.SaveAs2 maar snap niet zo goed hoe dat dan samen met dat PDF document weg gezet moet worden
(https://msdn.microsoft.com/en-us/library/office/ff836084.aspx)
de opties erachter, als ik alleen SaveFormsData op True zet, blijft het leeg.


Code:
Private Sub btnVerzend_Click()
Dim olkApp As Object
Dim strSubject As String
Dim strTo As String
Dim strBody As String
Dim strAtt As String


strSubject = "Aanmelding indiensttreding van " & Me.txtwnnaam
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding. De naam is " & Me.txtwnnaam
    strTo = "hier@email.nl"
If ActiveDocument.FullName <> "" Then

ActiveDocument.SaveAs2
'
'Silent Save_to_PDF Macro
'
        DocPDF = Replace(ActiveDocument.FullName, ".docm", ".pdf")
        ActiveDocument.ExportAsFixedFormat OutputFileName:=DocPDF, _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, Item:= _
        wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    End If
    strAtt = DocPDF
    
    Set olkApp = CreateObject("outlook.application")
    With olkApp.CreateItem(0)
        .To = strTo
        .Subject = strSubject
        .Body = strBody
        .Attachments.Add strAtt
        .Attachments.Add OpenFile
        .Send
        '.Display
    End With
   Set olkApp = Nothing
End Sub
 
Inmiddels opgelost door het zo te zetten:

Het lijkt erop dat ik nu wel een gevuld document krijg, gelijk vanuit de verzendknop.

Is het mogelijk om de bestandsnaam de naam van txtwnnaam te geven?

heb het vermoedde dat het te maken heeft met OutputFileName:=DocPDF, _

Code:
Private Sub btnVerzend_Click()
Dim olkApp As Object
Dim strSubject As String
Dim strTo As String
Dim strBody As String
Dim strAtt As String
Dim ct As Control
Dim docVar As Variable
Dim shp As InlineShape
Dim i As Integer

    For Each ct In Controls
        If TypeName(ct) = "TextBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)
        If TypeName(ct) = "CheckBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Value = 0, 0, 1)
        If TypeName(ct) = "ComboBox" Then ActiveDocument.Variables(ct.Name) = IIf(ct.Text = "", " ", ct.Text)
    Next

    For Each shp In ActiveDocument.InlineShapes
        With shp
            If .OLEFormat.ProgID = "Forms.OptionButton.1" Then
                .OLEFormat.Object.Value = Me("Opt" & .OLEFormat.Object.Name).Value
''                MsgBox .OLEFormat.Object.Name & vbLf & .OLEFormat.Object.Value
            End If
        End With
    Next shp
    
    With ActiveDocument
        .Fields(ActiveDocument.Fields.Count).Locked = True
        UpdateFields
        .Fields(ActiveDocument.Fields.Count).Locked = False
    End With

strSubject = "Aanmelding indiensttreding van " & Me.txtwnnaam
   strBody = "Beste collega, In de bijlage de aanmelding van een nieuwe indiensttreding. De naam is " & Me.txtwnnaam
    strTo = "email@hier.nl"
If ActiveDocument.FullName <> "" Then

ActiveDocument.SaveAs2
'
'Silent Save_to_PDF Macro
'
        DocPDF = Replace(ActiveDocument.FullName, ".docm", ".pdf")
        ActiveDocument.ExportAsFixedFormat OutputFileName:=DocPDF, _
        ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, Item:= _
        wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    End If
    strAtt = DocPDF
    
    Set olkApp = CreateObject("outlook.application")
    With olkApp.CreateItem(0)
        .To = strTo
        .Subject = strSubject
        .Body = strBody
        .Attachments.Add strAtt
        .Attachments.Add OpenFile
        .Send
        '.Display
    End With
   Set olkApp = Nothing
End Sub
 
Laatst bewerkt:
Je bent al zo ver gekomen, dat laatste stapje zou je toch ook zelf moeten kunnen zetten :). DocPDF wordt in de regel erboven gevuld met FullName, de documentnaam. Die moet je dus vervangen door de naam van het tekstvak.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan