mailmerge vanuit excel xlsm

Status
Niet open voor verdere reacties.

StephaanKemp

Nieuwe gebruiker
Lid geworden
13 jul 2015
Berichten
4
ik probeer een mailmerge op te zetten vanuit een xlsm. Omdat in dezelfde xlsm ook e-mailing gedaan wordt wil ik de briefmailing ook via deze weg.
personen die een mailadres hebben maar aangeven geen mails te willen, krijgen een brief (code wenstmail = 0).
ik heb een aantal oplossingen gevonden en getest maar ik blijk vast te lopen op het openen van de query om de filtering te doen van de data.
het documenten testtabel.docx is gelinkt met de tabel in de xlsm met het normale opzetten van een wordmailmerge . Als ik die uitvoer gaat alles prima. Dus de link tussen het worddoc en de exceldata zijn ok.

Code:
[CODE]wordPath = "c:\temp\testtabel.docx"
                Set wordApp = CreateObject("Word.Application")
                Set wordDoc = wordApp.Documents.Open(wordPath)
                Set wordMailMerge = wordDoc.MailMerge
                 
   
   
                wordMailMerge.OpenDataSource Name:=ThisWorkbook.FullName, _
                ConfirmConversions:=False, ReadOnly:=True, LinkToSource:=True, _
                AddToRecentfiles:=False, PasswordDocument:="", PasswordTemplate:="", _
                WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
                Format:=wdOpenFormatAuto, Connection:= _
                "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\temp\testmerge.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:E" _
                , SQLStatement:="SELECT *  FROM `[Tabel1]`"
                wordMailMerge.Execute
                wordDoc.Close
                wordApp.Visible = True
[/CODE]

ik heb nog andere versies van bovenstaande geprobeerd, zonder de provider etc maar zonder succes.

mogelijk zit het in de odbc link want van wat ik online kan vinden is dit al voldoende om het te doen werken of mix is odbc met DDE of iets dergelijks.
Code:
OpenDataSource Name:=strWorkbookName, ReadOnly:=True, _
        LinkToSource:=False, AddToRecentfiles:=False, _[ATTACH]332626[/ATTACH][ATTACH]332625[/ATTACH][ATTACH]332626[/ATTACH][ATTACH]332625[/ATTACH]
        Format:=wdOpenFormatAuto, _
        SQLStatement:="SELECT * FROM `Tabel1`", _
        SubType:=wdMergeSubTypeAccess
      With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
      End With

ik heb gemerkt dat als ik op de opendatasource-lijn kom dat er dan een dialoogvenster opent. Als ik zoals deze op de c:\ temp werk, krijg ik de melding dat het aanmelden op odbc niet gelukt is. Als ik de gegevens op bvb c:\documenten\mailing\vba zet dan opent een ander soort dialoogvenster die probeert c:\documenten\mailing.xls te openen. Zelfs als ik het pad er volledig in zet "c:\documenten\mailing\vba" dan nog lijkt de laatste map verloren te gaan en wordt er xls geplakt aan de voorlaatste mapnaam.

ik ben er ook nog niet uit hoe ik de Select From moet opzetten om naar de tabel te verwijzen. de schuine quotes `` moeten er zeker staan maar moet de tabelreferentie met of zonder rechte haken? Ik heb ook op een aantal sites info gevonden dat je naar een named range moet verwijzen, maar dat geeft hetzelfde resultaat. Als ik de filtering wil doen zou mijn selectstatement nog
Code:
WHERE `wenstmail` = 0
moeten hebben maar ik dacht eerst te testen met de volledige database. Als dat werkt kan de filtering geactiveerd worden.

Volgens wat ik kan vinden op verschillende sites moet het mogelijk zijn om een macro te starten in een xl die een word-doc opent dat voor het ophalen van de data linked met de xlsm vanwaar de macro gestart is. op sommige sites suggereert men ook het gebruik van een dotx template maar dat maakt weinig veschil.

ik voeg zowel het worddoc als de xlsm toe
hopelijk kan iemand mij in de juiste richting sturen
 
Het zal mij wel ontgaan zijn, maar ik zie het nut niet om het op deze manier te doen. Als je een vaste gegevensbron hebt (je Excel bestand) en een vaste filtering (wenstmail = 0) dan kun je toch gewoon in Word een samenvoegdocument maken met dit bestand, en dat te allen tijde openen? Waarom zou je alles steeds opnieuw willen instellen? In de tijd die je nodig hebt om deze code te bedenken en maken kun je, schat ik, dat Word document zo'n 600 keer openen en op de knop <Samenvoeging uitvoeren> klikken. En dan zit ik vermoed ik nog aan de lage kant. Hou het vooral simpel...
 
zoals gezegd : Omdat in dezelfde xlsm ook e-mailing gedaan wordt wil ik de briefmailing ook via deze weg.

en er worden nog andere acties ondernomen in die excel en de inhoud van de data verandert dagelijks en de bedoeling is dat de eindgebruiker 1 excel heeft waarin alles kan gebeuren
 
Het een staat het ander toch niet in de weg? Nog afgezien dat je vanuit Word óók de email verzending kan doen met hetzelfde bestand, heb je een vaste filtering, die sla je op in het document. Het Word bestand gaat dus altijd goed en de email ook. Nergens voor nodig om dat zo ingewikkeld te doen.
 
er zijn nog andere items die maken dat het vanuit excel moet, maar daar ga ik niet verder op in want dat is zinloos.
in ieder geval heb ik na wat verder experimenteren een werkende versie vanuit excel aan de praat gekregen en met verschillende soorten filtering getest waarvan hieronder 1 voorbeeld

Code:
Sub DoMailMerge()
'Note: A VBA Reference to the Word Object Model is required, via Tools|References
Dim wdApp As New Word.Application, wdDoc As Word.Document
Dim strWorkbookName As String: strWorkbookName = ThisWorkbook.FullName
With wdApp
  'Disable alerts to prevent an SQL prompt
  .DisplayAlerts = wdAlertsNone
  'Open the mailmerge main document
  Set wdDoc = .Documents.Open("C:\temp\testtabel.docx", _
    ConfirmConversions:=False, ReadOnly:=True, AddToRecentFiles:=False)
  With wdDoc
    With .MailMerge
      'Define the mailmerge type
      .MainDocumentType = wdFormLetters
      'Define the output
      .Destination = wdSendToNewDocument
      .SuppressBlankLines = True
      'Connect to the data source
      .OpenDataSource Name:="C:\temp\testmerge.xlsm", _
        ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\temp\testmerge.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB" _
        , SQLStatement:="SELECT * FROM `Blad2$` WHERE `wenstmail` = 0 AND `adres` < 'woonpl20'", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
      With .DataSource
        .FirstRecord = wdDefaultFirstRecord
        .LastRecord = wdDefaultLastRecord
      End With
      'Excecute the merge
      .Execute
      'Disconnect from the data source
      .MainDocumentType = wdNotAMergeDocument
    End With
    'Close the mailmerge main document
    .Close False
  End With
  'Restore the Word alerts
  .DisplayAlerts = wdAlertsAll
  'Display Word and the document
  .Visible = True
End With
End Sub
 
Ook die andere redenen (niet items) kunnen nooit tot de conclusie leiden dat dit vanuit Excel moet.
Het illustreert je onbekendheid met Word en mailmerge.
Ga je daar eerst eens verder in verdiepen.
Ik hoop dat de door jou geplaatste code niet door iemand wordt overgenomen.

Waarom je een vraag op dit forum plaats is me een raadsel, omdat je volledig suggestieresistent blijkt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan