Probleme mit Serienbrief aus Excel starten
#1
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 einen Serienbrief in Word geöffnet, die Serienbrieffunktion gestartet, den Serienbrief dann komplett als PDF abgespeichert, die geänderte Excel Datenquelle sowie den Word Serienbrief  gesichert und anschließend alle Dokumente automatisch geschlossen. Außerdem kann man In diesem Code sämtliche Speicherorte selbst bestimmen.
Nun hat sich leider meine Excel Datenquelle verändert und seitdem funktioniert nichts mehr. Ich habe alles Mögliche ausprobiert, leider ohne Erfolg.

Der Code sieht folgender Maßen aus:

Code:
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
  
Gerne kann ich Euch auch ein Beispiel der Excel Datenquelle und des Word Serienbriefes zur Verfügung stellen, allerdings wollen ja die Meisten, Dateien aus dem Internet nicht öffnen.
Vielleicht reicht ja der Code schon aus, um mir zu helfen.

Besten Dank für Eure Hilfe

Gruß
Stefan
Top
#2
Moin!
Zitat:Nun hat sich leider meine Excel Datenquelle verändert und seitdem funktioniert nichts mehr.

Es gibt ja nur zwei Stellen im Code, die auf Excel verweisen:

strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
Dies ist immer eindeutig, obwohl ich dies einfacher so schreiben würde:
strWorkbookName = ThisWorkbook.FullName
Da die Variable aber nur einmal verwendet wird, würde ich gleich ganz auf sie verzichten.

Ferner:
SQLStatement:="SELECT * FROM `Pflege_Namen_Quittung$`"
welches aus der Spalte Pflege_Namen_Quittung ausliest.

Wenn Du weiterhin Probleme hast, kannst Du ruhig die Datei hochladen.
Allerdings musst Du genauer beschreiben, was genau nicht in Deinem Sinne funktioniert.

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Top
#3
Hallo Zusammen,

@Ralf: vielen Dank für Deine Antwort. Ich stelle jetzt hier mal meine Beispieldateien zur Verfügung. Öffnet man die .xlsm Datei, geht es speziell um den Button "Quittungen erstellen". Betätigt man diesen, dann soll folgendes passieren:

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

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"  Huh

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


Angehängte Dateien
.xlsm   1_Namen_&_Quittungen.xlsm (Größe: 35,94 KB / Downloads: 7)
.docx   Quittung.docx (Größe: 18,94 KB / Downloads: 5)
.docx   result.docx (Größe: 17,94 KB / Downloads: 4)
Top
#4
Hallo,

ich frage mich bei solchen Problemen immer, warum umständlich, wenn es doch viel einfacher geht!
Man kann doch das Ganze in Excel abwickeln und muss nicht über die Sereinbieffunktion von Word gehen - einfach ein weiteres Tabellenblatt mit er Quittung "bauen" und alles spielt sich in einer Datei ab - feritg ist der Salat.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Top
#5
(13.10.2018, 17:51)Glausius schrieb: ich frage mich bei solchen Problemen immer, warum umständlich, wenn es doch viel einfacher geht!
Man kann doch das Ganze in Excel abwickeln und muss nicht über die Sereinbieffunktion von Word gehen - einfach ein weiteres Tabellenblatt mit er Quittung "bauen" und alles spielt sich in einer Datei ab - feritg ist der Salat.

Hallo Günter,

Danke für Deine Antwort. Mir ist nicht bekannt, dass es in Excel eine Serienbrieffunktion gibt. Ich brauche ja nicht nur eine Quittung. Kommt ein neuer Name hinzu, müssen jedes Mal die Quittungen für alle Namen neu in ein PDF gespeichert werden, da vor dem Quittungsdruck eine Sortierung nach Namen stattfindet und die Reihenfolge im erzeugten PDF File eine wichtige Rolle spielt. Gerne kannst Du mich vom Gegenteil überzeugen.  :19:

Danke und Gruß
Stefan
Top
#6
Hallo,

warum startest du die Serienbrieffunktion nicht einfach in Word? Die Verbindung zu Excel wird dann automatisch hergestellt.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#7
(15.10.2018, 14:08)Klaus-Dieter schrieb: warum startest du die Serienbrieffunktion nicht einfach in Word? Die Verbindung zu Excel wird dann automatisch hergestellt.

Hallo Klaus-Dieter, 

Die Serienbrieffunktion ist nur ein kleiner Teil des Konstruktes. Ich möchte diese Aufgabe an Menschen abgeben, die Word und Excel noch nie gehört haben. Daher soll das alles automatisiert funktionieren.
Ich bin leider auch kein VBA Spezialist, aber mir ist da folgender Gedanke gekommen: 

Kann man Word denn per VBA sagen, dass es den Serienbrief beim öffnen des Dokuments automatisch ausführen, alle erzeugten Schreiben als pdf speichern und das Word Dokument speichern und schließen soll?  
Dann bräuchte man ja Excel nur noch sagen, dass es das Serienbriefdokument öffnen muss. Nur so ein Gedanke.

Gruß Stefan
Top
#8
Hallo Zusammen,

Das Thema ist erledigt. Es lag tatsächlich an meiner Datenquelle. Dort hatte ich eine Leerzeile an oberster Stelle eingefügt. Damit konnte der Serienbrief nichts anfangen. Jetzt tut der Code genau was er soll.

viele Grüße Stefan
Top
#9
Hallo Stefan,

ich habe hier einen Link zu einem Beispiel. Vielleicht hilft das.

https://microsoft-programmierer.de/Details?d=1300&a=8&f=165&l=0&v=d
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste