Mit VBA erstellter S.-Brief erzeugt mehr Briefe als Daten
27.09.2025 15:16:54
MMartin
mit dem unten stehen Code (den habe ich im Internet gefunden) erzeuge ich aus meiner Excel über einen Button einen Serienbrief. Es funktioniert alles gut und die Briefe werden erzeugt.
Doch unter dieser Tabelle kommen weitere Zeilen, in denen Werte stehen die aber nichts mit dem Serienbrief zu tun haben und auch nicht berücksichtigt werden in den Seriendruckfeldern im Serienbrief. Doch beim erzeugen der Serienbriefe nimmt der Code auch diese Zeilen mit und erzeugt daraus Serienbriefe ohne die dazugehörigen Felder auszufüllen. Also leere Adressfelder mit dem Text dazu.
Gibt es eine Möglichkeit den Code so zu ändern, dass dies nicht mehr vorkommt. Und noch eine wichtige Frage: Gibt es eine Möglichkeit, in der Excel Tabelle z. B. eine zusätzliche Spalte einzufügen in der man z. B ein x oder ein Ja beim jeweiligen Datensatz eingibt und dann nur diese Auswahl an den Seriendruck übergeben wird. Ich möchte das gerne schon in der Tabelle markiert und erledigt haben, anstatt wie ich oft gesehen habe, in der automatischen Auswahl die beim erzeugen von Serienbriefen erscheint.
Vorab vielen Dank und allen ein schönes Wochenende.
Gruß Martin
-------------------------------------------------------------------------------------------
'------ SETUP >------
Private Const sWord_Document_Name As String = "Vorlage Anschreiben.docx"
Private Const Table_with_Adresses As String = "Tabelle1.xlsm" 'Ich habe den tatsächlichen Excel Namen, hierfür durch "Tabelle1" im Code ersetzt
'------ SETUP >------
Sub Erstelle_Word_Serienbrief_als_Vorschau()
'-------------------- Word_oeffnen() >--------------------
' Path >
Dim sCurrent_Path As String
sCurrent_Path = ActiveWorkbook.Path
Dim sFull_Path_of_Word_File
sFull_Path_of_Word_File = sCurrent_Path & "\" & sWord_Document_Name
'
' Word starten >
' with word_refernece >
'Dim app As Word.Application '*Verweis Word-dll
'Set app = New Word.Application '*Verweis Word-dll
'
' with late-binding >
Dim app As Object '*late-binding
Set app = CreateObject("Word.Application") '*late-binding
'
app.Visible = True
app.Activate
'
'
'Dim doc As Object '*late-binding
Dim doc As Word.Document 'word-dll
Set doc = CreateObject("Word.Document")
Set doc = app.Documents.Open(sFull_Path_of_Word_File, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False)
'
Dim wb As Workbook
Set wb = ThisWorkbook
Dim sExcel_Filename As String
sExcel_Filename = ThisWorkbook.FullName
' Datenquelle einstellen >
'*versions 2007+
'*Datenquelle für den Seriendruck
doc.MailMerge.MainDocumentType = wdFormLetters
doc.MailMerge.OpenDataSource Name:="" & sExcel_Filename & "", _
ReadOnly:=False, LinkToSource:=True, _
Format:=wdOpenFormatAuto, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & sExcel_Filename & ";Mode=Read;Extended Properties=""HDR=YES;IMEX=1;" _
, SQLStatement:="SELECT * FROM `" & 2025 & "$`", _
SubType:=wdMergeSubTypeAccess
'
' output >
doc.MailMerge.Destination = wdSendToNewDocument
doc.MailMerge.Execute Pause:=False
'
doc.Close SaveChanges:=False
Set doc = Nothing
Set app = Nothing
'----------------------------------------
End Sub
Anzeige