PDF zusammenfügen

  • Outlook

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Volker Bunge.

    PDF zusammenfügen

    Hallo zusammen,

    ich wollte mit Outlook 2019 Exchange ein Makro schreiben, welches mir den E-Mail Text und die Anhänge als PDF ausdruckt bzw. abspeichert.

    Mit diesem Code

    VB.NET-Quellcode

    1. ' https://ekiwi-blog.de/6533/vba-e-mail-pdf-anhang-drucken/
    2. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    3. Public Const Verz As String = "C:\Temp\Outlook\"
    4. Public OutlookDateiname As String
    5. Public Sub PrintSelectedAttachments()
    6. On Error Resume Next
    7. MkDir Verz
    8. On Error GoTo 0
    9. ' Nachricht als PDF abspeichern
    10. OutlookDateiname = SaveMessageAsPDF
    11. ' Anhänge abspeichern
    12. Dim Exp As Outlook.Explorer
    13. Dim Sel As Outlook.Selection
    14. Dim obj As Object
    15. Set Exp = Application.ActiveExplorer
    16. Set Sel = Exp.Selection
    17. For Each obj In Sel
    18. If TypeOf obj Is Outlook.MailItem Then
    19. PrintAttachments obj
    20. End If
    21. Next
    22. ' Alle zusammenfügen
    23. Dim Dateien As String
    24. Dim DateiSplit() As String
    25. Dim Ziel As String
    26. Dim mobjFSO As Object, mfsoFolder As Object, mfsoSubFolder As Object, mfsoFile As Object
    27. Set mobjFSO = CreateObject("Scripting.FileSystemObject")
    28. Set mfsoFolder = mobjFSO.GetFolder(Verz)
    29. On Error Resume Next
    30. Dateien = ""
    31. For Each mfsoFile In mfsoFolder.Files
    32. If Not mfsoFile Is Nothing Then
    33. If InStr(1, mobjFSO.GetFileName(mfsoFile), ".pdf") > 0 Then
    34. Dateien = Dateien & mfsoFile & "|"
    35. End If
    36. End If
    37. Next
    38. Dateien = Mid(Dateien, 1, Len(Dateien) - 1)
    39. pdf = New PDFSplitMerge.CPDFSplitMergeObj
    40. DateiSplit = Split(Dateien, "|")
    41. Ziel = Replace(DateiSplit(0), "00_", "99_")
    42. MsgBox (Ziel & vbCrLf & Dateien)
    43. Call pdf.Merge(Dateien, Ziel)
    44. pdf = Nothing
    45. MsgBox ("Fertig")
    46. End Sub
    47. Private Sub PrintAttachments(oMail As Outlook.MailItem)
    48. On Error Resume Next
    49. Dim colAtts As Outlook.Attachments
    50. Dim oAtt As Outlook.Attachment
    51. Dim sFile As String
    52. Dim sFileType As String
    53. Dim AnzahlAnhänge As Integer
    54. AnzahlAnhänge = 1
    55. Set colAtts = oMail.Attachments
    56. If colAtts.Count Then
    57. For Each oAtt In colAtts
    58. sFileType = LCase$(Right$(oAtt.FileName, 4))
    59. Select Case sFileType
    60. Case ".pdf"
    61. sFile = Verz & Format(AnzahlAnhänge, "00_") & OutlookDateiname & " " & oAtt.FileName
    62. oAtt.SaveAsFile sFile
    63. 'ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
    64. AnzahlAnhänge = AnzahlAnhänge + 1
    65. End Select
    66. Next
    67. End If
    68. End Sub
    69. Public Function SaveMessageAsPDF() As String
    70. Dim Selection As Selection
    71. Dim obj As Object
    72. Dim Item As MailItem
    73. Dim wrdApp As Word.Application
    74. Dim wrdDoc As Word.Document
    75. Set wrdApp = CreateObject("Word.Application")
    76. Set Selection = Application.ActiveExplorer.Selection
    77. For Each obj In Selection
    78. Set Item = obj
    79. Dim FSO As Object, TmpFolder As Object
    80. Dim OutlookDateiname As String
    81. Set FSO = CreateObject("Scripting.FileSystemObject")
    82. Set tmpFileName = FSO.GetSpecialFolder(2)
    83. OutlookDateiname = Item.Subject & " " & Item.CreationTime
    84. ReplaceCharsForFileName OutlookDateiname, "-"
    85. tmpFileName = Verz & "00_" & OutlookDateiname & ".mht" 'tmpFileName & "\" & OutlookDateiname & ".mht"
    86. Item.SaveAs tmpFileName, olMHTML
    87. Set wrdDoc = wrdApp.Documents.Open(FileName:=tmpFileName, Visible:=True)
    88. Dim WshShell As Object
    89. Dim SpecialPath As String
    90. Dim strToSaveAs As String
    91. Set WshShell = CreateObject("WScript.Shell")
    92. strToSaveAs = Verz & "00_" & OutlookDateiname & ".pdf"
    93. ' check for duplicate filenames
    94. ' if matched, add the current time to the file name
    95. If FSO.FileExists(strToSaveAs) Then
    96. OutlookDateiname = OutlookDateiname & Format(Now, "hhmmss")
    97. strToSaveAs = Verz & "00_" & OutlookDateiname & ".pdf"
    98. End If
    99. wrdApp.ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    100. strToSaveAs, ExportFormat:=wdExportFormatPDF, _
    101. OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, _
    102. Range:=wdExportAllDocument, From:=0, To:=0, Item:= _
    103. wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
    104. CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    105. BitmapMissingFonts:=True, UseISO19005_1:=False
    106. Next obj
    107. wrdDoc.Close
    108. wrdApp.Quit
    109. Set wrdDoc = Nothing
    110. Set wrdApp = Nothing
    111. Set WshShell = Nothing
    112. Set obj = Nothing
    113. Set Selection = Nothing
    114. Set Item = Nothing
    115. SaveMessageAsPDF = OutlookDateiname
    116. End Function
    117. ' This function removes invalid and other characters from file names
    118. Private Sub ReplaceCharsForFileName(sName As String, sChr As String)
    119. sName = Replace(sName, "/", sChr)
    120. sName = Replace(sName, "\", sChr)
    121. sName = Replace(sName, ":", sChr)
    122. sName = Replace(sName, "?", sChr)
    123. sName = Replace(sName, Chr(34), sChr)
    124. sName = Replace(sName, "<", sChr)
    125. sName = Replace(sName, ">", sChr)
    126. sName = Replace(sName, "|", sChr)
    127. sName = Replace(sName, "&", sChr)
    128. sName = Replace(sName, "%", sChr)
    129. sName = Replace(sName, "*", sChr)
    130. sName = Replace(sName, " ", sChr)
    131. sName = Replace(sName, "{", sChr)
    132. sName = Replace(sName, "[", sChr)
    133. sName = Replace(sName, "]", sChr)
    134. sName = Replace(sName, "}", sChr)
    135. sName = Replace(sName, "!", sChr)
    136. End Sub


    Kann ich schon den E-Mail Text und die PDF Anhänge super erstellen.

    Jetzt möchte ich diese PDF-Dateien der Reihe nach (00.., 01,, usw.) zu einer machen. (Deshalb auch die Nummerierung am Anfang der Dateien)

    Der Code (Zeile 63 – 73) läuft ohne Fehlermeldungen und so durch. Aber leider gibt es keine PDF-Datei. OK, dachte ich. der Code stammte ja auch aus einem VB.NET Projekt. Also schnell ein neues Testprojekt erstellt.

    VB.NET-Quellcode

    1. Imports PDFSplitMerge
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim Dateien As String
    5. Dim DateiSplit() As String
    6. Dim Ziel As String
    7. Dim pdf As Object
    8. Dateien = "C:\Temp\Outlook\00_Test-01.07.2020-10-58-23.pdf|C:\Temp\Outlook\01_Test-01.07.2020-10-58-23 3921_200701105659_001.pdf|C:\Temp\Outlook\02_Test-01.07.2020-10-58-23 3923_200701112544_001.pdf"
    9. pdf = New PDFSplitMerge.CPDFSplitMergeObj
    10. DateiSplit = Split(Dateien, "|")
    11. Ziel = Replace(DateiSplit(0), "00_", "99_")
    12. MsgBox(Ziel & vbCrLf & Dateien)
    13. pdf.Merge(Dateien, Ziel)
    14. pdf = Nothing
    15. End Sub
    16. End Class


    Den Verweis auf die passende DLL noch schnell gesetzt und gestartet.

    PDF wurde sauber und funktionsfähig erstellt. Also ist doch die DLL richtig installiert bzw. registriert und funktioniert.

    (Die Pfade habe ich aus Outlook kopiert und hier nur eingefügt).

    Jetzt halt meine Frage: Warum klappt das nicht mit Outlook? Oder gibt es da noch eine andere Möglichkeit?

    Freundliche Grüße
    Volker

    P.S. In Anhang mal die DLL-Datei
    Dateien

    Volker Bunge schrieb:

    Warum klappt das nicht mit Outlook?
    Weil Outlook keine .Net-APIs will sondern native WinAPIs.
    Ich hab's nicht analysiert, aber es könnte sein, dass die DLL auch einen nativen Einsprungspunkt für Merge hat, der eine andere Überladung hat.
    Du kannst ja mal testen, ob du mit pdf.Merge_2 oder pdf.Merge_3 zum Erfolg kommst.

    Ansonsten gibt's auch die Acrobat-Methode:
    wellsr.com/vba/2017/word/combi…th-vba-and-adobe-acrobat/
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod,

    vielen Dank für die Infos.

    Adobe kommt leider aus Kostengründen nicht in Frage.

    Dann werde ich mal versuchen ein OCX bzw. DLL zu schreiben, die ich dann ansprechen kann. Sollte dies dann auch nicht gehen, dann werde ich wohl ein kleines Zusatzprogramm schreiben, welches dann ein Verzeichnis überwacht und bei einer bestimmten Datei dann alle PDF zusammenfügt.

    Mit VB.NET klappt das Mergen ja super.

    Gibt es evtl. eine Möglichkeit mit folgenden PDF-Druckern
    Drag2PDF
    eDocPrinter PDF Pro
    ERP2PDF
    Microsoft Print to PDF
    PDFA-1b

    ein zusammenführen hinzubekommen?
    (Bei eDocPrinter PDF Pro und Microsoft Print to PDF bin ich mir sicher, dass es Drucker sind, bei den anderen nicht so. Alle tauchen aber bei der Druckerliste auf)

    Gruß

    Volker
    Du kannst vb.net-Code nicht eins zu eins in VBA übernehmen. Den muss man umschreiben.

    Ich kenne die PDFSplitMerge.dll nicht, nehme aber an. dass es sich um diese handeln müsste. -> guangmingsoft.net/PDFSplitMerge/index.htm
    Falls es so ist, dann schau dir das mitgelieferte Beispiel für VB an.

    Visual Basic-Quellcode

    1. Private Sub Form_Load()
    2. Dim pdf
    3. Set pdf = CreateObject("PDFSplitMerge.PDFSplitMerge.1")
    4. 'pdf.SetCode "Your license code here"
    5. pdf.Split "..\1.pdf", "1;1;1", "..\sp1-%d.pdf"
    6. pdf.Split "..\1.pdf", "1;2;3;4;1-2,3-4;1", "..\sp%d.pdf"
    7. pdf.Merge "..\sp0.pdf|..\sp1.pdf", "..\m1.pdf"
    8. pdf.Merge "..\1.pdf?1-2|..\sp1.pdf", "..\m2.pdf"
    9. pdf.Merge "..\1.pdf?1-2|..\sp1.pdf?2", "..\m3.pdf"
    10. Set pdf = Nothing
    11. End Sub


    Alternativ könntest du auch GhostScript verwenden. -> stackoverflow.com/questions/71…clude-original-file-names
    Hallo HenryV,

    der Code funktioniert so 1:1 auch in Outlook. (Die Splitt-Funktion habe ich nicht gebraucht, sollte aber auch so funktionieren.

    Da diese Lösung jetzt für 30-40 Benutzer sein soll, wie kann man bei Outlook die Makros zentral einbinden (so dass ich hier nur ändern muss und nicht bei jedem Benutzer)?

    (Bei Word funktioniert dies über den Autostart.)

    Gruß

    P.S.: Meine o. g. DLL ist das zwar nicht gewesen, ab die von Dir genannte hatte ich auch schon installiert)

    Volker

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Volker Bunge“ ()

    Hallo HenryV,

    Den Link schaue ich mir morgen mal an.

    Habe jetzt aber noch ein anderes Problem:

    Das erste Listing ab Zeile 88-108 soll mir alle Anhänge abspeichern. Wenn aber in meinem Mailtext auch noch Bilder drin sind, werden die auch abgespeichert. Das o. g. Listing habe natürlich schon um den Typ png und jpg erweitert und sieht jetzt so aus

    VB.NET-Quellcode

    1. Case ".png", ".jpg"
    2. sFile = Verz & Format(AnzahlAnhänge, "00_") & OutlookDateiname & " " & oAtt.FileName
    3. oAtt.SaveAsFile sFile
    4. 'ShellExecute 0, "print", sFile0, vbNullString, Verz, 0
    5. AnzahlAnhänge = AnzahlAnhänge + 1


    Da ich leider jetzt nicht mit Image1, Image2, Image3 filtern kann (das sind übrigens meine drei Bilder aus dem Mailtext), fällt diese Möglichkeit leider raus.

    Ich will also nur die Dateien abspeichern, die auch tatsächlich als Anhang angehängt sind. Die anderen Mailtextbilder sind ja schon in der ersten PDF mit drin.

    Hast Du, oder jemand anderes, hier eine Lösung parat?

    Gruß

    Volker
    Hallo HenryV,

    der Link hat mich leider nicht großartig weitergebracht. Habe aber trotzdem die Lösung gefunden (siehe Zeile 115 ff).

    Hier mal mein bisheriger kpl. Code.

    VB.NET-Quellcode

    1. ' https://ekiwi-blog.de/6533/vba-e-mail-pdf-anhang-drucken/
    2. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    3. Public Const Verz As String = "C:\Temp\Outlook\"
    4. Public Const ZielVerz As String = "C:\Users\bungev\Documents\SAP\SAP GUI\"
    5. Public OutlookDateiname As String
    6. Public Mailvom As String
    7. Public Sub PrintSelectedAttachments()
    8. MsgBox ("PDF erstellen starten")
    9. On Error Resume Next
    10. MkDir Verz
    11. MkDir ZielVerz
    12. ' Alte Dateien vorher löschen
    13. Kill Verz & "*.*"
    14. On Error GoTo 0
    15. ' Nachricht als PDF abspeichern
    16. OutlookDateiname = SaveMessageAsPDF
    17. ' Anhänge abspeichern
    18. Dim Exp As Outlook.Explorer
    19. Dim Sel As Outlook.Selection
    20. Dim obj As Object
    21. Set Exp = Application.ActiveExplorer
    22. Set Sel = Exp.Selection
    23. For Each obj In Sel
    24. If TypeOf obj Is Outlook.MailItem Then
    25. PrintAttachments obj
    26. End If
    27. Next
    28. ' Alle zusammenfügen
    29. Dim Dateien As String
    30. Dim DateiSplit() As String
    31. Dim Ziel As String
    32. Dim mobjFSO As Object, mfsoFolder As Object, mfsoSubFolder As Object, mfsoFile As Object
    33. Set mobjFSO = CreateObject("Scripting.FileSystemObject")
    34. Set mfsoFolder = mobjFSO.GetFolder(Verz)
    35. On Error Resume Next
    36. Dateien = ""
    37. For Each mfsoFile In mfsoFolder.Files
    38. If Not mfsoFile Is Nothing Then
    39. If InStr(1, mobjFSO.GetFileName(mfsoFile), ".pdf") > 0 Then
    40. Dateien = Dateien & mfsoFile & "|"
    41. End If
    42. End If
    43. Next
    44. Dateien = Mid(Dateien, 1, Len(Dateien) - 1)
    45. DateiSplit = Split(Dateien, "|")
    46. Ziel = Replace(DateiSplit(0), "00_", "99_")
    47. ' Herkunft: https://www.vb-paradise.de/index.php/Thread/131364-PDF-zusammenf%C3%BCgen/?postID=1135166#post1135236
    48. Dim pdf
    49. Set pdf = CreateObject("PDFSplitMerge.PDFSplitMerge")
    50. pdf.Merge Dateien, Ziel
    51. Set pdf = Nothing
    52. Dim Wahl As String
    53. Dim Dateiname As String
    54. Wahl = InputBox("Um welche Art von Schreiben handelt es sich?" & vbCrLf & vbCrLf & _
    55. "01. Fotos von Zählern" & vbCrLf & _
    56. "02. Zählerstände" & vbCrLf & vbCrLf & _
    57. "Bitte 1-2 eingeben oder selbst eine Art bestimmen.")
    58. Select Case Wahl
    59. Case "1"
    60. Dateiname = "Fotos von Zählern.pdf" ' " & OutlookDateiname & ".pdf"
    61. Case "2"
    62. Dateiname = "Zählerstände.pdf" ' " & OutlookDateiname & ".pdf"
    63. Case Else
    64. End Select
    65. Dateiname = ZielVerz & Dateiname
    66. FileCopy Ziel, Dateiname
    67. MsgBox ("Fertig")
    68. End Sub
    69. Private Sub PrintAttachments(oMail As Outlook.MailItem)
    70. On Error Resume Next
    71. Dim colAtts As Outlook.Attachments
    72. Dim oAtt As Outlook.Attachment
    73. Dim sFile As String
    74. Dim sFileType As String
    75. Dim AnzahlAnhänge As Integer
    76. AnzahlAnhänge = 1
    77. Set colAtts = oMail.Attachments
    78. If colAtts.Count Then
    79. For Each oAtt In colAtts
    80. ' http://www.office-loesung.de/ftopic634062_0_0_asc.php
    81. If InStr(1, oMail.HTMLBody, oAtt.FileName) > 0 Then
    82. ' MsgBox "Grafik befindet sich im Text"
    83. Else
    84. ' MsgBox "Grafik ist nicht im Text sondern ein richtiger Anhang"
    85. sFileType = LCase$(Right$(oAtt.FileName, 4))
    86. Select Case sFileType
    87. Case ".png", ".jpg", ".doc", "docx"
    88. sFile = Verz & Format(AnzahlAnhänge, "00_") & OutlookDateiname & " " & oAtt.FileName
    89. oAtt.SaveAsFile sFile
    90. ShellExecute 0, "print", sFile, vbNullString, Verz, 0
    91. AnzahlAnhänge = AnzahlAnhänge + 1
    92. Case ".pdf"
    93. sFile = Verz & Format(AnzahlAnhänge, "00_") & OutlookDateiname & " " & oAtt.FileName
    94. oAtt.SaveAsFile sFile
    95. 'ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
    96. AnzahlAnhänge = AnzahlAnhänge + 1
    97. End Select
    98. End If
    99. Next
    100. End If
    101. End Sub
    102. Public Function SaveMessageAsPDF() As String
    103. Dim Selection As Selection
    104. Dim obj As Object
    105. Dim Item As MailItem
    106. Dim wrdApp As Word.Application
    107. Dim wrdDoc As Word.Document
    108. ' Set wrdApp = CreateObject("Word.Application")
    109. ' Word schön geöffnet?
    110. On Error Resume Next
    111. Dim Wordschongestartet As Boolean
    112. ' For Each Process In Process.GetProcesses
    113. ' MsgBox (Process.Name)
    114. ' If InStr(1, Process.Name, "Word") > 0 Then
    115. ' 'er existiert!
    116. ' Wordschongestartet = True
    117. ' End If
    118. ' Next
    119. '
    120. Dim objWMI As Object, objProc As Object
    121. Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & "." & "\root\cimv2")
    122. Set objProc = objWMI.ExecQuery("Select * from Win32_Process " & "Where Name = 'Winword.exe'")
    123. If objProc.Count = 0 Then
    124. Wordschongestartet = False
    125. Else
    126. Wordschongestartet = True
    127. objProc.Quit
    128. End If
    129. If Wordschongestartet = False Then
    130. Set wrdApp = CreateObject("Word.Application")
    131. End If
    132. On Error GoTo 0
    133. Set Selection = Application.ActiveExplorer.Selection
    134. For Each obj In Selection
    135. Set Item = obj
    136. Dim FSO As Object, TmpFolder As Object
    137. Dim OutlookDateiname As String
    138. Set FSO = CreateObject("Scripting.FileSystemObject")
    139. Set tmpFileName = FSO.GetSpecialFolder(2)
    140. OutlookDateiname = Item.Subject & " " & Item.CreationTime
    141. ReplaceCharsForFileName OutlookDateiname, "-"
    142. tmpFileName = Verz & "00_" & OutlookDateiname & ".mht" 'tmpFileName & "\" & OutlookDateiname & ".mht"
    143. Item.SaveAs tmpFileName, olMHTML
    144. Set wrdDoc = wrdApp.Documents.Open(FileName:=tmpFileName, Visible:=True)
    145. Dim WshShell As Object
    146. Dim SpecialPath As String
    147. Dim strToSaveAs As String
    148. Set WshShell = CreateObject("WScript.Shell")
    149. ' wrdApp.Visible = True
    150. ' Seitenränder einstellen auf ein geringes Mass
    151. With ActiveDocument.PageSetup
    152. .LineNumbering.Active = False
    153. .Orientation = wdOrientPortrait
    154. .TopMargin = CentimetersToPoints(1)
    155. .BottomMargin = CentimetersToPoints(1)
    156. .LeftMargin = CentimetersToPoints(0.5)
    157. .RightMargin = CentimetersToPoints(0.5)
    158. .Gutter = CentimetersToPoints(0)
    159. .HeaderDistance = CentimetersToPoints(1.27)
    160. .FooterDistance = CentimetersToPoints(1.27)
    161. .PageWidth = CentimetersToPoints(21.59)
    162. .PageHeight = CentimetersToPoints(27.94)
    163. .FirstPageTray = wdPrinterDefaultBin
    164. .OtherPagesTray = wdPrinterDefaultBin
    165. .SectionStart = wdSectionNewPage
    166. .OddAndEvenPagesHeaderFooter = False
    167. .DifferentFirstPageHeaderFooter = False
    168. .VerticalAlignment = wdAlignVerticalTop
    169. .SuppressEndnotes = False
    170. .MirrorMargins = False
    171. .TwoPagesOnOne = False
    172. .BookFoldPrinting = False
    173. .BookFoldRevPrinting = False
    174. .BookFoldPrintingSheets = 1
    175. .GutterPos = wdGutterPosLeft
    176. End With
    177. ' Grafiken auf eine bestimmte Breite proportional verkleinern
    178. Dim objImageShape As InlineShape
    179. Dim FesteBreite As Integer
    180. FesteBreite = CentimetersToPoints(20)
    181. For Each objImageShape In ActiveDocument.InlineShapes
    182. If objImageShape.Width > FesteBreite Then
    183. objImageShape.Width = FesteBreite
    184. objImageShape.Height = (objImageShape.Height / objImageShape.Width) * FesteBreite
    185. End If
    186. Next
    187. strToSaveAs = Verz & "00_" & OutlookDateiname & ".pdf"
    188. ' check for duplicate filenames
    189. ' if matched, add the current time to the file name
    190. If FSO.FileExists(strToSaveAs) Then
    191. OutlookDateiname = OutlookDateiname & Format(Now, "hhmmss")
    192. strToSaveAs = Verz & "00_" & OutlookDateiname & ".pdf"
    193. End If
    194. wrdApp.ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    195. strToSaveAs, ExportFormat:=wdExportFormatPDF, _
    196. OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, _
    197. Range:=wdExportAllDocument, From:=0, To:=0, Item:= _
    198. wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
    199. CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    200. BitmapMissingFonts:=True, UseISO19005_1:=False
    201. Next obj
    202. wrdDoc.Close
    203. wrdApp.Quit
    204. Set wrdDoc = Nothing
    205. Set wrdApp = Nothing
    206. Set WshShell = Nothing
    207. Set obj = Nothing
    208. Set Selection = Nothing
    209. Set Item = Nothing
    210. SaveMessageAsPDF = OutlookDateiname
    211. End Function
    212. ' This function removes invalid and other characters from file names
    213. Private Sub ReplaceCharsForFileName(sName As String, sChr As String)
    214. sName = Replace(sName, "/", sChr)
    215. sName = Replace(sName, "\", sChr)
    216. sName = Replace(sName, ":", sChr)
    217. sName = Replace(sName, "?", sChr)
    218. sName = Replace(sName, Chr(34), sChr)
    219. sName = Replace(sName, "<", sChr)
    220. sName = Replace(sName, ">", sChr)
    221. sName = Replace(sName, "|", sChr)
    222. sName = Replace(sName, "&", sChr)
    223. sName = Replace(sName, "%", sChr)
    224. sName = Replace(sName, "*", sChr)
    225. sName = Replace(sName, " ", sChr)
    226. sName = Replace(sName, "{", sChr)
    227. sName = Replace(sName, "[", sChr)
    228. sName = Replace(sName, "]", sChr)
    229. sName = Replace(sName, "}", sChr)
    230. sName = Replace(sName, "!", sChr)
    231. End Sub


    Was jetzt noch fehlt sind

    1. Überprüfen, ob Word evtl. schon gestartet ist und Word entweder schließen oder am besten den Verweis auf den aktiven Wordprozess setzen (es kann ja sein, dass der Benutzer Word schon geöffnet hat, dann darf natürlich Word nicht beendet werden.)
    2. Die Bilder und Word-Dokumente muss ich noch in einzelne PDF ausdrucken. Werde morgen mal nach einem passenden eDocPrintercode schauen. Dort kann man den Pfad und Dateinamen und noch so einige Parameter hoffentlich per Code einstellen.

    Gruß
    Volker

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Volker Bunge“ ()