schubste24
Goto Top

Word Serienbrief aus Excel starten

Hallo zusammen,

Ich habe da ein Problem, bei dem ich alleine leider nicht weiterkomme und um Eure Hilfe bitte.

Vor einiger Zeit habe ich mir einen VBA Code bauen lassen.
Dieser hat durch betätigen eines Buttons in Excel folgendes getan:

1. Öffnen der Quittung.docx (Pfad der Datei muss im VBA Code vorgegeben werden)
2. Ausführen der Serienbrieffunktion mit allen Daten der xlsm Datei
3. Speichern aller erzeugten Serienbriefe im PDF Format (alle Briefe in nur einer Datei, Ablageort muss wieder im VBA Code vorgegeben werden)
4. Speichern und automatisches (prozessbeendendes) schließen aller docx und der xlsm Dateien

Nun hat sich leider meine Excel Datenquelle verändert und seitdem funktioniert nichts mehr, was ich nicht verstehe, da die Exceldatenquelle ja im Code kaum erwähnt wird. Ich habe alles Mögliche ausprobiert, leider ohne Erfolg.

Der Code sieht folgender Maßen aus:

Sub Quittungen_erstellen()

Dim wordfilepath             As String

Dim resultpath             As String
''''''''''' path of word and document  
wordfilepath = "C:\Users\schub\Desktop\Quittung.docx"  
resultpath = "C:\Users\schub\Desktop\result.docx"  
pdffilepath = "C:\Users\schub\Desktop\Quittungen"  


Dim wd As Object
   Dim wdocSource As Object

   Dim strWorkbookName As String

   On Error Resume Next
   Set wd = GetObject(, "Word.Application")  
   If wd Is Nothing Then
       Set wd = CreateObject("Word.Application")  
   End If
   On Error GoTo 0

   Set wdocSource = wd.Documents.Open(wordfilepath)

   strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name  
  '' Debug.Print strWorkbookName  
   
   wdocSource.MailMerge.MainDocumentType = wdFormLetters

   wdocSource.MailMerge.OpenDataSource _
           Name:=strWorkbookName, _
           AddToRecentFiles:=False, _
           Revert:=False, _
           Format:=wdOpenFormatAuto, _
           Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _  
           SQLStatement:="SELECT * FROM `Pflege_Namen_Quittung$`"  


       With wdocSource.MailMerge
       .Destination = wdSendToNewDocument
       .SuppressBlankLines = True
       With .DataSource
           .FirstRecord = wdDefaultFirstRecord
           .LastRecord = wdDefaultLastRecord
       End With
       .Execute Pause:=False
   End With

'wd.Visible = True  

wd.ActiveDocument.SaveAs resultpath
wd.ActiveDocument.Close SaveChanges:=False

'Print the document as a PDF  
   
wdocSource.Close SaveChanges:=False


Set wdocSource = wd.Documents.Open(resultpath)
'''closing of word and excel  
    wdocSource.ExportAsFixedFormat pdffilepath & ".pdf", 17  
    
    wdocSource.Close
   ThisWorkbook.Saved = True
   Application.Quit


End Sub

Ich stelle hier mal meine Beispieldateien zur Verfügung. Öffnet man die .xlsm Datei, geht es speziell um den Button "Quittungen erstellen".

So wie ich das verstehe, hat der Programmierer einen Zwischenschritt mit der result.docx eingebaut. In dieser Datei werden alle Serienbriefe erstellt und das benötigte PDF erzeugt. Die Frage ist nur, ob dieser Zwischenschritt überhaupt nötig ist und ob es vielleicht einfacher geht.
Im Moment funktioniert gar nichts mehr. Betätige ich den Button Quittungen erstellen, erfolgt ein langes laden und dann folgt die Fehlermeldung "Microsoft Excel wartet auf die Beendigung einer OLE-Aktion in einer anderen Anwendung"

Außerdem habe ich noch folgendes herausgefunden. Deklariere ich meine xlsm Datei in den Eigenschaften als schreibgeschützt, öffne sie dann und betätige den Button "Quittungen erstellen", dann läuft es durch. Nur hat das so keinen Nutzen für mich, da die Tabelle ja immer wieder mit neuen Namen befüllt wird und durch den Schreibschutz kein Speichern der neuen Daten möglich ist.

Ich tüftle nun schon seit Tagen und wäre sehr dankbar, wenn jemand helfen könnte.

Besten Dank

Gruß Stefan

Content-ID: 389570

Url: https://administrator.de/contentid/389570

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

SeriousEE
Lösung SeriousEE 16.10.2018 um 13:39:43 Uhr
Goto Top
Hallo Stefan,

Aus meiner Sicht funktioniert deine Excel Anwendung ganz gut sofern man die Daten nach links oben verschiebt beginnend mit A1.
Derzeit beginnen deine Daten in der Zelle B2, was für die Serienbrief-Funktion von Word nicht passt. Dadurch funktioniert auch die Zuordnung der Serienbrief-Felder nicht mehr.

Ggf. solltest du lieber die Schaltflächen woanders platzieren!

Viele Grüße
SeriousEE
schubste24
schubste24 16.10.2018 um 15:44:06 Uhr
Goto Top
Hallo SeriousEE,

Vielen Dank für Deine Antwort. Ich habe das jetzt mal umgebaut und erneut versucht. Leider bekomme ich beim Ausführen des Codes jetzt die Fehlermeldung, welche auf meinem Screenshot zu sehen ist.

2018-10-16_153657

Was ist das nun wieder? Liegt es an den vorgegeben Pfaden?

Besten Dank für Deine Hilfe.

Gruß Stefan
SeriousEE
Lösung SeriousEE 16.10.2018 aktualisiert um 16:21:28 Uhr
Goto Top
Ich kann aus dem Screenshot den Fehler noch nicht erkennen. Kann man das aktualisierte Excel Dokument im Google Drive Ordner hinzufügen?

Ich habe im wesentlichen nur folgendes mit deinen Daten gemacht:

  • Google Drive Daten herunterladen
  • Word Dokument "Quittung.docx" geöffnet und Datenquelle auf mein Verzeichnis aktualisiert.
  • Excel Dokument geöffnet:
  • Markieren von B2 nach G8 und verschieben nach A1
  • Alt + F11 -> 3x Pfade getauscht
  • Ausführen

PS: Das ganze System reagiert sehr sensibel auf Namensänderungen. Im Screenshot ist zu sehen, dass das Excel Dokument jetzt 2_Namen_&_Quittungen.xlsm statt 1_Namen_&_Quittungen.xlsm heißt!
schubste24
schubste24 16.10.2018 um 20:29:51 Uhr
Goto Top
Hallo SeriousEE,

Du hattest recht. Es funktioniert tadellos. Ich hatte vergessen, die Datenquelle im Word Dokument zu ändern. Wenn man alles ganz gewissenhaft einstellt, dann tut der Code was er soll. Mein Fehler war tatsächlich die oberste leere Zeile in der Datenquelle. Damit konnte der Serienbrief nichts anfangen. Jetzt bin ich wahnsinnig erleichtert und froh.

Vielen herzlichen Dank für Deine Hilfe!

Gruß Stefan