VBA: mail merge doen naar verschillende bestanden met bestandsnamen uit de brondata

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik heb een test-Excel met de volgende kolommen:

Dossiernummer
Voornaam
Naam
Adres
Huisnummer
Postcode
Gemeente

Ik heb dit forum en internet al afgezocht, maar ik vind niets dat werkt. Ik ben zelf niet zo heel beslagen in VBA, dus als het een foutmelding geeft, kan ik dit meestal niet zelf oplossen.

Hoe kan ik een macro of VBA code opnemen in het merge document dat aparte documenten per lijn in de Excel aanmaakt, met het veld Dossiernummer als bestandsnaam?

Stel dat in de Excel de volgende dossiers staan:

789-5747135-97
200-5747351-00


zou ik dus na uitvoeren van de code volgende gemergde bestanden willen hebben:

789-5747135-97.docx
200-5747351-00.docx
 
Ik snap niet wat je wilt. Een Mailmerge Excel-Word levert in Word aparte documenten op, niet in Excel. Dus wat wil je? Een hint: als je een macro zoekt die het mailmerge document in Word splitst in aparte documenten, dan heb je blijkbaar wel het internet afgezocht, maar nog niet het Word forum, want daar wordt deze vraag regelmatig gesteld, en daar vind je dan ook het meest geëigende antwoord. Zoek op "splitter" en je vind de juiste macro.
 
Ik bedoelde uiteraard aparte docs in Word ;-) Ik heb de splitter macro wel gevonden, maar die loopt in het al gemergde document. Ik zoek iets dat loopt in het brondocument. Het dossiernummer - voor de bestandsnaam - staat bij mij ook niet in de eerste alinea, maar ergens halverwege, in een tabel.
 
Ik zoek iets dat loopt in het brondocument.
Gelukkig een vraag met een simpel antwoord. Namelijk: dat is onmogelijk. De grap van samenvoegen is nu juist dat je op basis van gegevensbron een samenvoeging uitvoert. Weliswaar kun je een samenvoeging gelijk afdrukken, wat, als je een pdf printer gebruikt, nog wel losse documenten oplevert, maar normaal gesproken krijg je één document als output.

Wil je de samenvoeging beïnvloeden ‘in het brondocument’, dan zit er maar één ding op denk ik: de samenvoeging per document opnieuw opstarten. Dan kun je net zo goed vanuit Excel een Word sessie opstarten, en het document op basis van DocVariables vullen. Dus niks samenvoegen.
 
Het blijkt dat het er maar op aan komt hoe je iets Googlet ;-) Als ik zocht op 'loop through mail merge' had ik vrij snel het antwoord gevonden :-)

Bij deze, for future generations:

Code:
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
Set MainDoc = ActiveDocument
With MainDoc
  StrFolder = "C:\Users\tomsw\Desktop\test" & "\"
  For i = 1 To .MailMerge.DataSource.RecordCount
    With .MailMerge
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      With .DataSource
        .FirstRecord = i
        .LastRecord = i
        .ActiveRecord = i
        StrName = .DataFields("Dossiernummer").Value & .DataFields("Voornaam").Value
      End With
      .Execute Pause:=False
    End With
    With ActiveDocument
      .SaveAs2 FileName:=StrFolder & StrName & ".pdf", FileFormat:=wdFormatPDF, AddToRecentFiles:=False
      .Close SaveChanges:=False
    End With
  Next i
End With
Application.ScreenUpdating = True
End Sub
 
Dat is inderdaad wel ongeveer wat ik bedoelde. Al zou ik, zoals ik al aangaf, dan kiezen voor alles vanuit Excel aansturen met een ‘normaal’ document met DocVariabelen, en op die manier de documenten dus doorlopen. Al heeft samenvoegen het voordeel dat je van de velden af bent. Voordeel van DocVariables is dan weer dat je die ook makkelijk kan omzetten naar tekst, en dat je geen gezeur hebt met koppelen met het brondocument. Dat is met samenvoegen soms weer een probleem.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan