Anzeige
Archiv - Navigation
1352to1356
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nur ausgefüllte Serienbriefe zu PDF zusammenfügen

Nur ausgefüllte Serienbriefe zu PDF zusammenfügen
01.04.2014 18:44:34
Isa
Hallo,
ich sitze mittlerweile den ganzen Tag am PC und habe mir vorgenommen auch nicht aufzustehen, bis ich für folgendes Problem eine Lösung habe:
Mit einem Makro in einem Excel-Dokument möchte ich in einem Word-Dokument einen Serienbrief erstellen, der direkt in eine PDF umgewandelt werden soll. Das klappt auch sehr gut. Doch ich erhalte stets eine PDF, welche alle möglichen Serienbriefe enthält, also auch solche, welche ich in Excel gar nicht ausgefüllt habe. Ist es möglich, dass nur die Briefe in der PDF erscheinen, welche auch ausgefüllt wurden?
Sub AbgleichmitDatenquelleundWordinPDFumwandeln()
'Verweis auf Microsoft Word 12.0 Object Library setzen
Dim WinWord, WinDoc As Word.Document, docSerienbrief As Word.Document
Dim oWrd As Object
Dim oDoc As Object
Dim strSheetName As String
strSheetName = "Tabelle1"
sdoc = ThisWorkbook.Path & "\1_Zeugnisse zum Ausdrucken.doc"
Set oWrd = CreateObject("word.application")
Set oDoc = oWrd.Documents.Open(sdoc)
oWrd.Visible = False
ActiveWorkbook.Save
With oDoc.MailMerge.MainDocumentType = wdFormLetters
oDoc.MailMerge.OpenDataSource Name:= _
ThisWorkbook.FullName _
, ConfirmConversions:=False, LinkToSource:=True, Connection:= _
"Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & ThisWorkbook. _
FullName & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je" _
, SQLStatement:="SELECT * FROM `Datenübertragung$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
oDoc.MailMerge.ViewMailMergeFieldCodes = wdToggle
'Serienbrief mit allen Daten in neuem Dokument erstellen
With oDoc.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
Dim strDateiname As String
Dim Pfad As String
Dim strPDF As String
Pfad = ActiveWorkbook.Path & "\Zeugnisse"
strPDF = Pfad
oWrd.ActiveDocument.ExportAsFixedFormat OutputFileName:=strPDF, ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
End With
End With
oDoc.Close
oWrd.Quit SaveChanges:=wdDoNotSaveChanges
Set oWrd = Nothing
Set oDoc = Nothing
End Sub


Ich bin für jede Hilfe sehr dankbar!!!

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur ausgefüllte Serienbriefe zu PDF zusammenfügen
03.04.2014 12:23:06
fcs
Hallo Isa,
ich hab mal ein wenig mit Word und Excel unter Office 2010 experimentiert.
Das in Word mögliche Bearbeiten der Empfängerliste (z.B. Filter setzen) hab ich unter VBA nicht hinbekommen.
Was gut funktioniert: Das Blatt "Datenübertragung" mit den Serienbriefdaten wird in eine neue Datei kopiert, die nicht erwünschten Daten werden gelöscht, dann die Datei gespeichert, geschlossen und der Serienbrief erstellt. Diese Datei wird dan in Word als Serienbrief-Datenquelle verwendet.
Ich hab dein Makro mal in diese Richtung angepasst.
Das Löschen der Zeilen in der Serienbrief-Quelle musst du natürlich noch anpassen.
Der einfachste Weg dürfte sein, eine zusätzliche Spalte zu verwenden, in der die Markierungen manuell eingegben oder per Formel ermittelt werden.
Gruß
Franz
Sub AbgleichmitDatenquelleundWordinPDFumwandeln()
'Verweis auf Microsoft Word 12.0 Object Library setzen
Dim WinWord, WinDoc As Word.Document, docSerienbrief As Word.Document
Dim oWrd As Object
Dim oDoc As Object
Dim strSheetName As String, strCon As String, strSQL As String, sdoc As String
ActiveWorkbook.Save
strSheetName = "Datenuebertragung.xls" 'Dateiname der Quelle für Word-Serienbrief
Call SerienbriefdateiAufbereiten(strSheetName)
sdoc = ThisWorkbook.Path & "\1_Zeugnisse zum Ausdrucken.doc"
Set oWrd = CreateObject("word.application")
Set oDoc = oWrd.Documents.Open(sdoc)
oWrd.Visible = False 'True 'Während der Testphase auf True setzen!!!!
With oDoc.MailMerge.MainDocumentType = wdFormLetters
'Text für Verbindung und SQL-Abfrage der Daten des Serienbriefes
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" _
& ThisWorkbook.Path & "\" & strSheetName _
& ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Je"
strSQL = "SELECT * FROM `Datenübertragung$`"
oDoc.MailMerge.OpenDataSource Name:=ThisWorkbook.Path & "\" & strSheetName, _
ConfirmConversions:=False, LinkToSource:=True, _
Connection:=strCon, SQLStatement:=strSQL, SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
oDoc.MailMerge.ViewMailMergeFieldCodes = False ' = wdToggle
'Serienbrief mit allen Daten in neuem Dokument erstellen
With oDoc.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End With
Dim strDateiname As String
Dim Pfad As String
Dim strPDF As String
Pfad = ActiveWorkbook.Path & "\Zeugnisse"
strPDF = Pfad
oWrd.ActiveDocument.ExportAsFixedFormat OutputFileName:=strPDF, _
ExportFormat:=wdExportFormatPDF, _
OpenAfterExport:=True, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent, _
IncludeDocProps:=True, KeepIRM:=True, CreateBookmarks:= _
wdExportCreateNoBookmarks, DocStructureTags:=True, BitmapMissingFonts:= _
True, UseISO19005_1:=False
oDoc.Close
oWrd.Quit savechanges:=wdDoNotSaveChanges
Set oWrd = Nothing
Set oDoc = Nothing
End Sub
Sub SerienbriefdateiAufbereiten(strDateiname As String)
Dim wkbBrief As Workbook
Dim wksBrief As Worksheet
Dim wksQuelle As Worksheet
Dim Zeile As Long
Set wksQuelle = ActiveWorkbook.Worksheets("Datenübertragung")
'Tabellenblatt mit Serienbriefdaten in eine neue Datei kopieren
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
wksQuelle.Copy
Set wkbBrief = ActiveWorkbook
Set wksBrief = wkbBrief.Worksheets(1)
With wksBrief
'nicht erwünschte Zeilen in Serienbriefquelle löschen
For Zeile = .UsedRange.Row + .UsedRange.Rows.Count - 1 To 2 Step -1
'Die nachfolgende Prüfung muss an die tatsächlichen Daten in der Tabelle angepasst werden. _
'Prüfen, ob Zeile in Spalte F nicht mit "X" markiert.
If UCase(.Cells(Zeile, 6).Value)  "X" Then
.Rows(Zeile).Delete
End If
Next
End With
Application.DisplayAlerts = False
'Datei speichern im Format für Excel 2003
If Val(Left(Application.Version, 2)) 

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige