Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Word


Betrifft: VBA Word von: kirsten
Geschrieben am: 01.10.2017 16:47:21

Hallo zusammen,

ich habe ein angepassten Code, um eine Serienbriefdatei in einzelne PDF's zu speichern. Inzwischen tut sie auch im Wesentlichen was sie soll, einzig: wenn alle PDF`s gedruckt sind, stockt er an folgender Stelle: " .ActiveRecord = i" mit dem Hinweis: "Laufzeitfehler 5853, kann Parameter nicht finden" und bezieht sich auf einen Datensatz, den es nicht mehr gibt (z.B. Nr. 6 bei 5 Empfängern des Serienbriefes). Kann mir jemand erklären, wo der Fehler liegt? Vielen Dank schonmal für eure Mühe.

Sub Merge_To_Individual_Files()
'Merges one record at a time to the chosen output folder
Application.ScreenUpdating = False
Dim StrFolder As String, StrName As String, MainDoc As Document, i As Long, j As Long
Set MainDoc = ActiveDocument
With MainDoc
  StrFolder = .Path & Application.PathSeparator
  For i = 1 To .MailMerge.DataSource.RecordCount
    With .MailMerge
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      With .DataSource
        .FirstRecord = i
        .LastRecord = i
        .ActiveRecord = i
        If Trim(.DataFields("Einheit")) = "" Then Exit For
        StrName = .DataFields("Einheit") & "_" & .DataFields("Nachname")
      End With
      .Execute Pause:=False
    End With
    StrName = Trim(StrName)
    With ActiveDocument
      '.SaveAs2 FileName:=StrPath & StrName & ".docx", FileFormat:=wdFormatXMLDocument,  _
AddToRecentFiles:=False
      ' and/or:
      .SaveAs2 FileName:=StrPath & StrName & ".pdf", FileFormat:=wdFormatPDF, AddToRecentFiles:= _
False
      .Close SaveChanges:=False
    End With
  Next i
End With
Application.ScreenUpdating = True
End Sub

  

Betrifft: falsches Forum von: KlausF
Geschrieben am: 01.10.2017 17:52:15

Hi Kirsten,

Du bist hier im Excel-Forum gelandet. Wäre wahrscheinlich besser,
die Frage noch einmal im Word-Forum zu stellen ...

Gruß
Klaus


  

Betrifft: AW: falsches Forum von: Luschi
Geschrieben am: 01.10.2017 18:49:29

Hallo Kirsten,

das ständige Zugreifen und wieder deaktivieren von '.MailMerge.DataSource' kann in einer Zählschleife gutgehen, nicht gutgehen,
zumal ja in der Schleife der Zeiger auf den Datensatz verändert wird.
Word besitzt da bessere Steuerungsmöglichkeiten (siehe Link im Vba-Code):

Sub Merge_To_Individual_Files()
    Application.ScreenUpdating = False
    
    'Merges one record at a time to the chosen output folder
    Dim MainDoc As Document
    Dim StrFolder As String, StrName As String
 
    Set MainDoc = ActiveDocument
    With MainDoc
        StrFolder = .Path & Application.PathSeparator
        With .MailMerge
            .Destination = wdSendToNewDocument
            .SuppressBlankLines = TrueWith
            .MailMerge.DataSource
        End With
        With .MailMerge.DataSource
            .ActiveRecord = wdFirstRecord
            Do
               If Trim(.DataFields("Einheit")) = "" Then Exit For
               StrName = Trim(.DataFields("Einheit") & "_" & .DataFields("Nachname"))
               MainDoc.MailMerge.Execute Pause:=False
               With ActiveDocument
                  '.SaveAs2 FileName:=StrPath & StrName & ".docx", _
                      FileFormat:=wdFormatXMLDocument, AddToRecentFiles:=False
                  'and/or:
                  .SaveAs2 FileName:=StrPath & StrName & ".pdf", _
                  FileFormat:=wdFormatPDF, AddToRecentFiles:=False
                 .Close SaveChanges:=False
               End With
               'siehe:
               'https://msdn.microsoft.com/de-de/library/office/ff838901(v=office.15).aspx
               If .ActiveRecord <> .RecordCount Then
                  .ActiveRecord = wdNextRecord
               End If
            Loop Until .ActiveRecord = .RecordCount
        End With
    End With
    Application.ScreenUpdating = True
 End Sub
Gruß von Luschi
aus klein-Paris