Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1680to1684
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

Serienbreiferstellung mit Excel VBA

Serienbreiferstellung mit Excel VBA
13.03.2019 15:44:39
Malte
Hallo liebes Forum,
ich habe folgendes Problem:
ich habe eine Arbeitsmappe, in der Berechnungen angestellt werden.
Diese Berechnungen werden anschließend für die Erstellung von 7 Serienbriefen verwendet. Das funktioniert auch alles wunderbar. Das einzige Problem ist, dass beim Erstellen der PDF-Datein immer eine leere Seite angfügt wird (ebenso in der Word Datei). Hat jemand eine Idee, wie ich das verhindern kann?
Sub Serienbrief_erstellen(strSB As String, strTable As String, strFilenamePDF As String,  _
strFilenameDOCX As String)
' Im Excel VBA-Editor muss vorher für die Datei mit diesem Makro unter Extras-Verweise
' den Verweis auf die Microsoft Word x.y Object Library aktiviert werden!!
'Variablen deklarieren
Dim WinWord, WinDoc As Word.Document
Dim strCon, strDatenquelle, strWordVorlage As String
strDatenquelle = ThisWorkbook.FullName
strWordVorlage = p_strPfadSerienbriefe & strSB
Set WinWord = CreateObject("Word.Application")
WinWord.Visible = True
'Vorlagedatei öffnen
Set WinDoc = Documents.Open(strWordVorlage)
'Datenquelle öffnen
With WinDoc
With .MailMerge
.OpenDataSource Name:=strDatenquelle, _
ConfirmConversions:=False, _
LinkToSource:=True, _
Revert:=False, _
Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.Jet.OLEDB.4.0;" _
& "User ID=Admin;" _
& "Data Source=" & strDatenquelle & ";" _
& "Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";" _
& "Jet OLEDB:System database="""";" & "Jet OLEDB:Registry Path="""";" _
& "Jet OLEDB:Engine ", _
SQLStatement:="SELECT * FROM `" & strTable & "$`", SQLStatement1:="", _
SubType:=wdMergeSubTypeAccess
'Serienbrief mit allen Daten in neuem Dokument erstellen
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
'Erstelltes Dokument speichern
With ActiveDocument
' Speichern als DOCX
.SaveAs2 p_strPfadAnlageDOCX & "\" & strFilenameDOCX
'Speichern als PDF
.ExportAsFixedFormat p_strPfadAnlagePDF & "\" & strFilenamePDF, wdExportFormatPDF, FROM:=1,  _
_
TO:=1
'Dokument schließen
.Close False
End With
'Datenquelle schliessen
.DataSource.Close
End With
'Vorlagedatei schliessen
.Close SaveChanges:=False
End With
'Word Application schließen
WinWord.Quit
Set WinWord = Nothing
Set WinDoc = Nothing
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Serienbreiferstellung mit Excel VBA
13.03.2019 16:49:12
Luschi
Hallo Malte,
in diesem Code sind einige Stolperfallen drin:
- alle Variablen, die mit 'wd' beginnen, z.B wdOpenFormatAuto, sind Word-Vba-Konstanten,
  die Excel-Vba nicht kennt, seine Konstanten beginnen mit 'xl'
- deshalb müssen diese Konstanten im Excel-Code neu definiert, oder durch den entsprechenden
  numerischen Wert ersetzt werden
- Dim WinWord, WinDoc As Word.Document
  zeigt an, daß Du 'early binding' benutzt, also einen Vba-Verweis zu Word gesetzt hast
- Set WinWord = CreateObject("Word.Application") zeigt aber, daß Du 'late binding' benutzt,
  um eine Verbindung zu Word aufzubauen
- dieses Doppelgemoppel ist nicht sinnvoll
- Connection:="Provider=Microsoft.Jet.OLEDB.4.0;" ist der Verbindungsstring, wie er bis Office 2003 gebräuchlich war
- ab Office 2007 ist folgender Verbindungsstring üblich:
  Connection:="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ...
Siehe dazu auch: https://microsoft-programmierer.de/Details?d=1300&a=8&f=165&l=0&v=d
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Serienbreiferstellung mit Excel VBA
13.03.2019 17:04:15
Malte
Hallo Luschi,
vielen Dank für deine Anmerkungen!
Ich werde mir den Code nochmal vornehmen.
Hast du denn einen Ansatz, wie ich die leeren Seiten am Ende verhindern kann?
Gruß Malte

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige