Automated Save As after MailMerge and .Destination = wdSendToPrinter in VBA

  • Word

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von mumpel.

    Automated Save As after MailMerge and .Destination = wdSendToPrinter in VBA

    Hi Professionals,

    I am running Win7 MS Office 2010 and Visual Basic 6.5.

    I am trying to automate a .pdf Output and came so far to only enter a
    filename for the printed .pdf. Since the outfile is to have a similar
    name as the inputfile, the save as could be automated as well.

    Now for my code so far:

    Visual Basic-Quellcode

    1. Sub Macro2()
    2. Dim x, i As Integer
    3. Dim y As String
    4. x = 1
    5. i = 1
    6. y = x
    7. Do While i < 999
    8. If Dir("D:\Video\list\b-" + y + "\") = "" Then
    9. i = i + 1
    10. x = i
    11. y = x
    12. Else
    13. ActiveDocument.MailMerge.OpenDataSource Name:="D:\Video\list\b-" + y + "\" + y + ".xlsx", _
    14. ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    15. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    16. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    17. Format:=wdOpenFormatAuto, Connection:= _
    18. "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\Video\list\1.xlsx;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:G" _
    19. , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= _
    20. wdMergeSubTypeAccess
    21. ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
    22. With ActiveDocument.MailMerge
    23. .Destination = wdSendToPrinter
    24. .SuppressBlankLines = True
    25. With .DataSource
    26. .FirstRecord = wdDefaultFirstRecord
    27. .LastRecord = wdDefaultLastRecord
    28. End With
    29. .Execute Pause:=False
    30. End With
    31. i = i + 1
    32. x = i
    33. y = x
    34. End If
    35. Loop
    36. End Sub


    Is there a way to insert something like

    Visual Basic-Quellcode

    1. With ActiveDocument.MailMerge
    2. .Destination = wdSendToPrinter
    3. .SuppressBlankLines = True
    4. With .DataSource
    5. .FirstRecord = wdDefaultFirstRecord
    6. .LastRecord = wdDefaultLastRecord
    7. End With
    8. .SaveAs FileName:="C:\Users\user\Documents\b-" + y + "XXX.pdf"
    9. .Execute Pause:=False


    Help is much appreciated!

    Greetings

    Gerne auch auf Deutsch antworten, habs nur mal universell verfasst
    Hi Profis,

    Ich verwende Win7 MS Office 2010 mit Visual Basic 6.5.

    Ich versuch eine .pdf-Ausgabe zu automatisieren und bis so weit gekommen, dass nur noch der Dateiname für das über den Adobe .pdf Drucker gedruckte .pdf abgefragt wird. Da die Ausgabedatei im namen einen selben syntax wie die Ausgabe-Datei haben soll, könnte man auch das automatisieren.

    Jetzt mal zu meinem aktuellen Code:

    Visual Basic-Quellcode

    1. Sub Macro2()
    2. Dim x, i As Integer
    3. Dim y As String
    4. x = 1
    5. i = 1
    6. y = x
    7. Do While i < 999
    8. If Dir("D:\Video\list\b-" + y + "\") = "" Then
    9. i = i + 1
    10. x = i
    11. y = x
    12. Else
    13. ActiveDocument.MailMerge.OpenDataSource Name:="D:\Video\list\b-" + y + "\" + y + ".xlsx", _
    14. ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    15. AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
    16. WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
    17. Format:=wdOpenFormatAuto, Connection:= _
    18. "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\Video\list\1.xlsx;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:G" _
    19. , SQLStatement:="SELECT * FROM `Sheet1$`", SQLStatement1:="", SubType:= _
    20. wdMergeSubTypeAccess
    21. ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
    22. With ActiveDocument.MailMerge
    23. .Destination = wdSendToPrinter
    24. .SuppressBlankLines = True
    25. With .DataSource
    26. .FirstRecord = wdDefaultFirstRecord
    27. .LastRecord = wdDefaultLastRecord
    28. End With
    29. .Execute Pause:=False
    30. End With
    31. i = i + 1
    32. x = i
    33. y = x
    34. End If
    35. Loop
    36. End Sub


    Besteht eine Möglichkeit etwas in diesem Sinne zu implementieren?

    Visual Basic-Quellcode

    1. With ActiveDocument.MailMerge
    2. .Destination = wdSendToPrinter
    3. .SuppressBlankLines = True
    4. With .DataSource
    5. .FirstRecord = wdDefaultFirstRecord
    6. .LastRecord = wdDefaultLastRecord
    7. End With
    8. .SaveAs FileName:="C:\Users\user\Documents\b-" + y + "XXX.pdf"
    9. .Execute Pause:=False


    Jede Hilfe ist willkommen,
    Grüße
    Wenn Du nur eine PDF-Datei erstellen möchtest, dann schau Dir die VBA-Funktion "ExportAsFixedFormat" an. Dürfte einfacher zu realisieren sein.


    Edit:
    Ein Beispielcode.

    Visual Basic-Quellcode

    1. Sub ExportActiveDocAsPDF()
    2. Dim strPath As String
    3. Dim strName As String
    4. Dim strOpen As Boolean
    5. If MsgBox("Soll die Datei nach dem Erstellen angezeigt werden?", vbYesNo + vbQuestion, "Frage") = vbYes Then strOpen = True
    6. strPath = Environ("USERPROFILE") & "\Documents\"
    7. strName = "Test.pdf"
    8. ActiveDocument.ExportAsFixedFormat OutputFileName:=strPath & strName, _
    9. ExportFormat:=wdExportFormatPDF, _
    10. OpenAfterExport:=strOpen, OptimizeFor:=wdExportOptimizeForPrint, _
    11. Range:=wdExportAllDocument, Item:=wdExportDocumentContent, _
    12. IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
    13. wdExportCreateNoBookmarks, DocStructureTags:=True, _
    14. BitmapMissingFonts:=True, UseISO19005_1:=False
    15. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „mumpel“ () aus folgendem Grund: Codebeispiel gesetzt.

    Hallo Mumpel,

    Dein Weg ist in der Tat richtig, aber für meine Anwendung leider nicht was ich brauche... Ich muss den Serienbrief leider über den Adobe-pdf Drucker erstellen, damit alle Schriften eingebettet sind.
    Gibt es eine Automation, die ein Eingabefenster (Speichern als) jedesmal nach einer bestimmten Vorgabe befüllt und quittiert?
    Mit dem Adobe-Drucker nicht leicht. In Excel würde man das über "Application.GetSaveAsFilename" realisieren können. In Word gibt es das aber nicht. Aber vielleicht kannst Du das über den Acrobat.Distiller automatisieren, dann kannst Du Pfad und Dateiname automatisiert angeben ohne einen Dialog bestätigen zu müssen. software.maninweb.de/de/de_tut…_tutorials_office_02.html