Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehler 5631 bei Serienbrief

Forumthread: Fehler 5631 bei Serienbrief

Fehler 5631 bei Serienbrief
31.03.2021 10:51:05
Anton
Hallo an alle VBA-Experten.
Ich hätte da ein kleines Problem, bei dem ich nicht weiterkomme:
Ich habe einen Serienbrief erstellt (Word 2010), mit dem ich Rechnungen ausdrucke, das funktioniert auch sehr gut.
Auch wenn ich in dem Serienbrief folgende Regel einbaue: Überspringe Datensatz, wenn Rechnungbetrag = 0. Dann werden auch nur Belege gedruckt, die einen >0,00€ Rechnungbetrag enthalten. Soweit noch alles ohne das VBA-Script.
Nun möchte ich diese Belege nicht nur drucken, sondern auch als PDF einzeln speichern. Dafür ist dann das nachfolgende Script gedacht, welches mir die Belege einzeln abspeichern soll. (Das Script ist nicht von mir, sondern habe ich mir im Netz zusammengesucht).
Das klappt aber nur, wenn ich die oben genannte Regel nicht im Serienbrief eingebaut habe. Allerdings bekomme ich dann auch alle Belege gespeichert, auch die, die einen Betrag von 0,00€ haben. Baue ich die Regel wieder ein, bekomme ich die Fehlermeldung 5631 Word konnte das Hauptdokument nicht mit der Datenquelle verbinden, da entweder die Datensätze leer waren oder kein Datensatz den Abfrageoptionen entsprach. Und das Makro bricht ab.
Es liegt vermutlich an den Rechnungen mit dem Betrag 0,00€, die übersprungen werden sollen.
Wie müsste ich nun das Script anpassen, damit ich die Regel beibehalten kann, bzw. dass ich nur die Belege gespeichert bekomme, die einen Rechnungsbetrag >0,00€ haben?
Ich würde mich sehr über einen Lösungsvorschlag freuen.
Sub Serienbrief()
' set variables
Dim iBrief As Integer, sBrief As String
Dim AppShell As Object
Dim BrowseDir As Variant
Dim Path As String
' catch any errors
On Error GoTo ErrorHandling
' determine path
Set AppShell = CreateObject("Shell.Application")
strStartPath = "g:\Rechnungen\"
Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, (strStartPath))
'Set BrowseDir = AppShell.BrowseForFolder(0, "Speicherort für Serienbriefe auswählen", 0,  _
16)
If BrowseDir = "Desktop" Then
Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
Else
Path = BrowseDir.items().Item().Path
End If
If Path = "" Then GoTo ErrorHandling
Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
MkDir Path
On Error GoTo ErrorHandling
' hide application for better performance
MsgBox "Serienbriefe werden exportiert. Dieser Vorgang kann einige Minuten dauern -  _
Microsoft Word wird während dieser Zeit ausgeblendet", vbOKOnly + vbInformation
Application.Visible = False
' create bulkletter and export as pdf
With ActiveDocument.MailMerge
.DataSource.ActiveRecord = 1
Do
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
sBrief = Path & .DataFields("Name").Value & ", " & .DataFields("Vorname") & " -  _
" & .DataFields("Rechnungsnummer") & " -" & .DataFields("Betrag") & " € " & ".pdf"
'sBrief = Path & .DataFields("Name").Value & ".pdf"     Betrag MERGE-FORMAT
End With
.Execute Pause:=False
'ActiveDocument.AcceptAllRevisions
'If .DataSource.DataFields("Name").Value > "" Then
If .DataSource.DataFields("Name").Value > "" Then
ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
End If
ActiveDocument.Close False
If .DataSource.ActiveRecord  0 Then
MsgBox "Unbekannter Fehler: " & Err.Number & " - Bitte Makro erneut ausführen.",  _
vbOKOnly + vbCritical
Else
MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
End If
ActiveDocument.Close wdDoNotSaveChanges
End Sub


Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler 5631 bei Serienbrief
31.03.2021 11:32:25
Herbert_Grom
Hallo Anton,
für Serienbriefe brauchst du kein Word, sondern, wie für alle Briefe, nur Excel!
Lade deine Excel-Datei hoch, dann zeige ich dir wie es geht.
Servus

AW: Fehler 5631 bei Serienbrief
31.03.2021 11:41:00
Anton
Hallo Herbert_Grom,
ein verlockendes Angebot, aber da muss ich leider passen. Ist eine Vorgabe von meinem Chef.
MfG
Anton

Anzeige
AW: Fehler 5631 bei Serienbrief
31.03.2021 11:45:58
Herbert_Grom
Hallo Anton,
dann schocke mir deine Datei an meine Excel-Adr. (findest du hier in den Profilen) da bekommst du von mir eine "Datenschutzvereinbarung", womit dein Chef dann auch beruhigt sein sollte.
Servus
;
Anzeige
Anzeige

Infobox / Tutorial

Fehler 5631 bei Serienbrief in Word und Excel beheben


Schritt-für-Schritt-Anleitung

  1. Öffne Dein Word-Dokument: Stelle sicher, dass Dein Serienbrief korrekt eingerichtet ist, bevor Du das VBA-Script anwendest.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinDokumentName)", gehe auf "Einfügen" und wähle "Modul".

  4. VBA-Script einfügen: Kopiere das folgende Script in das Modul:

    Sub Serienbrief()
       ' set variables
       Dim iBrief As Integer, sBrief As String
       Dim AppShell As Object
       Dim BrowseDir As Variant
       Dim Path As String
       ' catch any errors
       On Error GoTo ErrorHandling
       ' determine path
       Set AppShell = CreateObject("Shell.Application")
       strStartPath = "g:\Rechnungen\"
       Set BrowseDir = AppShell.BrowseForFolder(0, "Ordner auswählen", &H1000, (strStartPath))
    
       If BrowseDir = "Desktop" Then
           Path = CreateObject("WScript.Shell").SpecialFolders("Desktop")
       Else
           Path = BrowseDir.items().Item().Path
       End If
    
       If Path = "" Then GoTo ErrorHandling
       Path = Path & "\Serienbrief-" & Format(Now, "dd.mm.yyyy-hh.mm.ss") & "\"
       MkDir Path
       On Error GoTo ErrorHandling
    
       ' hide application for better performance
       MsgBox "Serienbriefe werden exportiert. Dieser Vorgang kann einige Minuten dauern.", vbOKOnly + vbInformation
       Application.Visible = False
    
       ' create bulkletter and export as pdf
       With ActiveDocument.MailMerge
           .DataSource.ActiveRecord = 1
           Do
               .Destination = wdSendToNewDocument
               .SuppressBlankLines = True
               With .DataSource
                   .FirstRecord = .ActiveRecord
                   .LastRecord = .ActiveRecord
                   sBrief = Path & .DataFields("Name").Value & ".pdf"
               End With
               .Execute Pause:=False
               If .DataSource.DataFields("Betrag").Value > 0 Then
                   ActiveDocument.SaveAs FileName:=sBrief, FileFormat:=wdFormatPDF
               End If
               ActiveDocument.Close False
           Loop Until .DataSource.ActiveRecord = .DataSource.RecordCount
       End With
    
       MsgBox "Serienbriefe erfolgreich exportiert", vbOKOnly + vbInformation
       Exit Sub
    
    ErrorHandling:
       MsgBox "Fehler: " & Err.Description, vbOKOnly + vbCritical
    End Sub
  5. Script anpassen: Stelle sicher, dass die Bedingung für den Rechnungsbetrag korrekt ist, um 0,00 € zu vermeiden.

  6. Makro ausführen: Schließe den VBA-Editor und führe das Macro über Entwicklertools > Makros aus.


Häufige Fehler und Lösungen

  • Fehler 5631: Dieser Fehler tritt auf, wenn Word das Hauptdokument nicht mit der Datenquelle verbinden kann. Überprüfe, ob alle Datensätze ausgefüllt sind und keine leeren Zeilen vorhanden sind.

  • Falscher Pfad: Achte darauf, dass der Pfad, den Du im Script angibst, korrekt ist. Der browseforfolder vba Befehl kann helfen, einen gültigen Speicherort auszuwählen.


Alternative Methoden

Anstatt Word für Serienbriefe zu verwenden, kannst Du auch Excel nutzen. Exportiere die Daten aus Excel als PDF, indem Du die integrierte Funktion "Speichern unter" verwendest. Dies kann eine einfachere Methode sein, um die gewünschten Rechnungen zu speichern.


Praktische Beispiele

  1. Beispiel für die Datenquelle: Erstelle eine Excel-Datei mit den Spalten "Name", "Vorname", "Rechnungsnummer", und "Betrag".

  2. Anpassung des Scripts: Stelle sicher, dass die Datenfelder im VBA-Script mit den Spaltennamen in Deiner Excel-Datei übereinstimmen.


Tipps für Profis

  • Verwende Fehlerbehandlungsroutinen: Um häufige Fehler in Deinen VBA-Scripten zu vermeiden, implementiere On Error Anweisungen.

  • Teste das Skript mit Testdaten: Bevor Du es mit echten Dokumenten ausprobierst, teste das Skript mit Dummy-Daten, um mögliche Fehler zu identifizieren.


FAQ: Häufige Fragen

1. Warum erhalte ich die Fehlermeldung "Word konnte das Hauptdokument nicht mit der Datenquelle verbinden"? Diese Meldung erscheint häufig, wenn es leere Datensätze gibt oder wenn die Abfrageoptionen nicht erfüllt sind. Überprüfe Deine Datenquelle auf leere Zeilen.

2. Kann ich das Script anpassen, um auch andere Dateiformate zu speichern? Ja, Du kannst das Format im SaveAs Befehl ändern. Zum Beispiel, um als DOCX zu speichern, ändere FileFormat:=wdFormatPDF in FileFormat:=wdFormatXMLDocument.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige