Hoe maak ik een Word-document actief vanuit Access?

Status
Niet open voor verdere reacties.
Zie, ik dacht het wel, dat jouw code meer deed dan voor mijn projectje nodig is :)

De mijne is simpeler: het te openen Word-document is altijd hetzelfde, en is altijd gelinkt aan dezelfde query in Access. Zou het kunnen dat volgende code dan volstaat? Mits aanpassing van de bestands- en querynamen uiteraard.

Code:
Private Sub Knop16_Click()
Refresh                                                                         'om op te slaan wat je misschien nog niet heb opgeslagen.

DoCmd.SetWarnings False                                              'medingen uitzetten zoals wilt u de query draaien etc.


DoCmd.OpenQuery "QryVerzendBrief"                              'tabel maken met de brief gegevens. hier wordt de query geopend met de gegevens voor in de brief. hier moet dus jou querynaam worden ingevuld. ik schrijf de gegevens weg in een tabel tblverzendpost nr. dat zou in theorie misschien niet nodig zijn om dit eerst in een tabel op te slaan maar ik wist niet hoe te mailmerge naar een query dus heb ik deze tussen oplossing gekozen.

 
Dim WordApp As Object                                                  'variable defineren als object
Set WordApp = CreateObject("word.Application")             'zorgen dat de variable  een word application is.
WordApp.Documents.Open "G:\x\Secretariaat\TestHuisstijl2.doc"                 'de naam van het te openen document defineren. bij mij heet het document 'testhuisstijl2 en staat op G:\x
WordApp.Visible = True                                                                              'word zichtbaar maken ik wil later het word document nog bewerken

'MailMerge selected records from table to Word document
    With WordApp
        .ActiveDocument.MailMerge.OpenDataSource _                                    'hier wordt de mail merge gestart. TblVerzendPostnr bevat dus de gegevens die later in de merge gebruikt moeten wordne. misschien kan je hier ook direct je query naam zetten.
            Name:="G:\x\Secretariaat\brieven\Adressen.mdb", _
            LinkToSource:=True, Connection:="TblVerzendPostnr", _
            SQLStatement:="SELECT * FROM [TblVerzendPostnr]"
        .ActiveDocument.MailMerge.Execute
       ' .Close 0 hiermee wordt de opslag niet uitgevoerd.
    End With
End Sub
 
OK, ben ondertussen al wat verder geraakt. Ik zou de code nog een klein beetje moeten aanpassen. Het gaat vermoedelijk om dit:

SQLStatement:="SELECT * FROM [TblVerzendPostnr]"
.ActiveDocument.MailMerge.Execute


Hij zou bij mij nog een verdere filter moeten toepassen. Is dit dan:

SQLStatement:="SELECT * FROM [TblVerzendPostnr] WHERE Taal = 'NL' "

Klopt dat hier, met die tekentjes? Een ' en een " na elkaar, is dat wel juist? :)


En dan dit:

.ActiveDocument.MailMerge.Execute


Dit zorgt ervoor dat hij de mail merge uitvoert naar een nieuw document. Op zich geen grote ramp, maar de merge zou bij mij direct naar de printer moeten gebeuren. Hoe pas ik de code daarvoor aan?
 
Volgens mij is dit genoeg:
Code:
Dim qTemp As QueryDef

    sDB = CurrentProject.Path & "\" & CurrentProject.Name
    strSQL = "SELECT * FROM TblVerzendPostnr WHERE Taal = ""NL"""
    CurrentDb.QueryDefs("qExport").SQL = strSQL
    Set WordApp = CreateObject("Word.Application")
    With WordApp
        .Documents.Open CurrentProject.Path & "\TestHuisstijl2.doc"
        .Visible = False
        With WordApp.ActiveDocument
            With .MailMerge
                .OpenDataSource _
                    Name:=sDB, _
                    LinkToSource:=True, _
                    Connection:="TblVerzendPostnr", _
                    SQLStatement:="SELECT * FROM qExport"
                .Destination = wdSendToPrinter
            End With
        End With
    End With
 
Nu ben je me kwijt :)

Hier is mijn code tot nu toe:

Code:
Private Sub Mail_merge_starten_Click()

Refresh

DoCmd.SetWarnings False

Dim WordApp As Object
Set WordApp = CreateObject("word.Application")
WordApp.Documents.Open "C:\Users\Tom\Desktop\Test\Resources\Opvragen officieel bewijs - NL.docm"
WordApp.Visible = True

    With WordApp
        .ActiveDocument.MailMerge.OpenDataSource _
            Name:="C:\Users\Tom\Desktop\Test\Notarissen - opzoeken en opvolgen.accdb", _
            LinkToSource:=True, Connection:="Opvraging - te versturen", _
            SQLStatement:="SELECT * FROM [Opvraging - te versturen] WHERE Taal = ""N"""
        .ActiveDocument.MailMerge.Execute
       
       
    End With
End Sub

Als ik dit laat lopen, opent hij het mail merge document, en nog een tweede Word-doc met de resultaten van de mail merge.

Ik heb al dit geprobeerd:

Code:
.ActiveDocument.Mailmerge.Destination = wdSendToPrinter
.ActiveDocument.MailMerge.Execute

Maar dat lukt niet.
 
Nog steeds aan het experimenteren. Nu had ik gedacht om een macro om de twee mail merges (eerst e-mailen, dan printen) uit te voeren, in Word te steken, en die macro aan te roepen vanuit Access. Dat laatste lukt, maar de Word-macro loopt vast met deze foutmelding:

Knipsel.JPG

Dit is de code van de Word-macro:

Code:
Sub MailmergeNL()
'
' MailmergeNL Macro
'
'
    ActiveDocument.MailMerge.OpenDataSource Name:= _
        "C:\Users\Tom\Desktop\Test\Notarissen - opzoeken en opvolgen.accdb", _
        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:\Users\Tom\Desktop\Test\Notarissen - opzoeken en opvolgen.accdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=6;Jet OLEDB:Databa" _
        , SQLStatement:="SELECT * FROM `Opvraging - te versturen`", SQLStatement1 _
        :="", SubType:=wdMergeSubTypeAccess
    With ActiveDocument.MailMerge
         .MailAddressFieldName = "E-mailadressen"
         .MailSubject = "Uw aanvraag test 2"
        .Destination = wdSendToEmail
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
    With ActiveDocument.MailMerge
        .Destination = wdSendToPrinter
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
End Sub
 
misschien dom. Maar als je altijd het zelfde word doc wilt printen kan je er dan niet beter een rapport van maken en dat vanuit access printen? Is even stoeien om je rapport te krijgen maar wel makkelijker qua printen.
 
Daar had ik wel aan gedacht ☺ Voor brieven (dus printen) zou dat gaan, maar ik wil eerst een mail merge doen via e-mail, en dan pas printen...
 
ook emailen kan acces uitstekend voor je dus dat is geen probleem.

vanuit een macro: objectverzenden

of via vba:
Code:
With CurrentDb.OpenRecordset("[U]VerzendlijstActies[/U]")                               'query met gegevens die verzonden moeten worden
'With CurrentDb.OpenRecordset("KiesActienemer")                                            'query met email gegevens naar wie verzonden moet worden ik verzend het rapport naar verschillende mensen
    .MoveFirst
    Do While Not .EOF
        'defineren ontvanger en actienemer met veld uit recordset
        Ontvanger = !Email                                                                                'variable toekennen voor de email gegevens als je naar een vast adres mailt kan je hier ook de vaste gegevens plaatsen
        Actienemer = !Actienemer
        
        'report openen voor eerste naam  rapport naam is Verzendrapport
        DoCmd.OpenReport "verzendRapport", acViewPreview, , "actienemer = '" & Actienemer & "'"
        'report verzenden naar eerste ontvanger
        DoCmd.SendObject acSendReport, , acFormatSNP, Ontvanger, , , "actielijst" _                       'hier wordt het rapport verzonden. Ik heb hier een vaste tekst in het mailje je zou deze tekst ook
                                                                                                                                                  in je tabel kunnen opnemen dat past makkelijker aan. Met false (of true) geef je aan of je het mailjte 
                                                                                                                                                 nog wil bewerken voor verzending
            & " voor " & !Volledigenaam, "Graag de lijst bijwerken en dan retour. Jikke", False
        'voorgaande herhalen
        DoCmd.Close acReport, "verzendRapport", acSaveNo                                                               'aangezien hij alleen een open rapport kan verzenden moet het rapport vervolgens gesloten worden.
        
        'herhaal voor rapport interne audit punten
        
         
        .MoveNext
    'herhalen tot einde van de recordset
    Loop
End With
End Sub
 
Daar had ik wel aan gedacht ☺ Voor brieven (dus printen) zou dat gaan, maar ik wil eerst een mail merge doen via e-mail, en dan pas printen...
Maar het merge van een word docuement is niets anders dan het vullen van een rapport. Het is even puzzelen om je word document in een rapport om te zetten maar het kan wel. Gebruik het label-veld voor je tekst stukken of stel je veld als volgt samen:
="tekst deel1" & mergeveld & "tekst deel2"
 
kan je een klein voorbeeldje van je db en je word doc plaatsen zodat we je praktischer kunnen helpen?
 
Als ik me niet vergis, doet Objectverzonden dat alleen als bijlage bij een e-mail. Het zou in de body van het bericht moeten.

Ik begrijp het eerlijk gezegd niet meer. Als ik die in Word gemaakte macro aanroep vanuit Word, werkt hij telkens perfect. Maar als ik het Word-bestand open vanuit Access en probeer de macro aan te roepen, lukt het niet :-S
 
macro's in word is niet mijn sterkte kant. Heeft word ook iets van een autoexec macro die start als je word aanroept? Ik weet niet of je vanuit access een word macro kan starten.

Maar je wilt toch het word document verzenden? toch tijd voor een voorbeeldje.

deze mail code is waarschijnlijk beter dan http://www.helpmij.nl/forum/showthread.php/830643-Mailen?highlight=vba+bijlage+mailen'

Code:
Dim BestandsNaamOverzicht As String
Set r = CurrentDb.OpenRecordset("SELECT * FROM QryVerzendlijst;", dbOpenSnapshot)             'qryverzendlijst bevat je mail gegevens en merge velden voor het net ontbreekt hier een 
                                                                                                                                              dim r as recordset
Dim datum As String

datum = Format(Now(), "yymm")                                                                                              'hier wordt een datum aan een variable toegekend als je steeds een mail met zelfde
                                                                                                                                                tekst krijgt is een datum in de titel wel handig vind ik

    Dim OutApp As Object                                                                                                       'mail object defineren
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")                                                               'beter kopie/paste werk. blijkbaar moet je een outlook iets maken
    Set OutMail = OutApp.CreateItem(0)
    
    MailAdresAlgemeen = r("EmailManagementOverzicht")                                                                     'hier ken je eea aan de varialbe toe. mailadres
    OnderwerpAlgemeen = r("onderwerpManagementOverzichtAlgemeen") & "-" & datum                         'onderwerp
    TekstAlgemeen = r("tesktEmailManagementOverzichtAlgemeen")                                                      'email tekst
    bestandAlgemeen = Me.TxtBewaarlocatie & "ManagementRapportage - " & "x" & ".pdf"                       'bijlage- deze kan bij jou dus vervallen
    
    On Error Resume Next                                     
    With OutMail                                                                                                                                      'samenstellen van de mail
        .To = MailAdresAlgemeen                                                                                                      'hier komen de mail gegevens ik heb de gegevens eerst in een variable gestopt omdat
                                                                                                                                                     ze uit een tabel komen
        .CC = ""
        .BCC = ""
        .Subject = OnderwerpAlgemeen
        .Body = TekstAlgemeen
        .Attachments.Add bestandAlgemeen                                                                                        'jij wil dus geen attachment
        '.Send
        .display
        If Send = True Then                                                                                                          'hier ben ik nog niet helemaal uit waarom dit erbij moet. met display kan je je mail zien
            .Send
        Else
            .display
        End If
    End With
    On Error GoTo 0

                                                                                                                                          'hier moet je alleen nog iets zetten over print mail (waarom wil je de mail printen inhoud kan ik me voorstellen maar de mail. misschien een rapportje met exact de zelfde gegevens???
 
   Set OutMail = Nothing                                                                                                                'netjes afsluiten door alles weer leeg te maken.
    Set OutApp = Nothing
 
Laatst bewerkt:
Omdat je via Groningen vanuit Rotterdam naar Amsterdam wilt reizen. Dat kan wel, maar is nu eenmaal niet de handigste route. Sowieso is mailen vanuit Word net zo knullig als mailen vanuit Access; ook in Word is dat niet optimaal. Het is bijvoorbeeld nauwelijks mogelijk om een nette tekst in een mail te zetten en er een bijlage van te maken. Wel kun je een document zelf in de bodytekst zetten, maar dat kan dus ook prima vanuit Access. Je zou jezelf een hele hoop ellende en tijd hebben bespaard als je gelijk naar de makkelijkste optie had gevraagd/gegrepen :). SendObject is wellicht niet de handigste manier, maar dat hoef je ook niet te gebruiken; je kunt prima een mail via een Outlook object opmaken en versturen. Zelfs als HTML, al moet je daar dan wat meer voor doen.
 
macro's in word is niet mijn sterkte kant. Heeft word ook iets van een autoexec macro die start als je word aanroept? Ik weet niet of je vanuit access een word macro kan starten.

Maar je wilt toch het word document verzenden? toch tijd voor een voorbeeldje.

Goh, het is eigenlijk zoals Octafish zegt, ik wil gewoon vanuit Access een e-mail verzenden (en daarna die mails afdrukken). Ik dacht dat dit alleen via Word kon, maar blijkbaar niet :) Kan je even wat uitleg bij je code zetten, zoals vorige keer? :)
 
had ik al gedaan maar nu nog iets meer.
Voor het printen weet ik de code niet. Maar misschien kom je dan weer bij het zelfde probleem. Vanuit access wil je outlook iets laten doen nl printen ipv dat acces iets moet doen nl mail in outlook openen. als je verzenden en printen rapport achter elkaar zet gebeurt het nagenoeg gelijk tijdig.
misschien kan je als je steeds vanuit de zelfde emailbox sent zou je daarin een regel kunnen maken met: mail met tekst xxx printen na verzenden
 
Laatst bewerkt:
Goh, het is eigenlijk zoals Octafish zegt, ik wil gewoon vanuit Access een e-mail verzenden (en daarna die mails afdrukken). Ik dacht dat dit alleen via Word kon, maar blijkbaar niet :) Kan je even wat uitleg bij je code zetten, zoals vorige keer? :)
Leraar zal blij zijn dat zijn leerling er iets van opsteekt.
 
Als ik de code gewoon kopieer en plak, krijg ik een compileerfout: Sub of Function is niet gedefinieerd. En de editor highlight de r in onderstaande lijn:

MailAdresAlgemeen = r("EmailManagementOverzicht")

Voor de duidelijkheid: ik wil niet één e-mailbericht verzenden, maar een mail merge uitvoeren naar verschillende adressen die uit een query komen. De body (en het onderwerp van de mail) is ook variabel, maar dat zien we later dan wel weer.
 
Ik snap denk niet helemaal wat je met de mailmerge gedoelt. Je wilt naar verschillende mensen verschillende mailtjes sturen (maar wel bij elkaar horend).
Je begint met een query waarin staat
persoonA, emailadresA, mailgegevensA
persoonB, emailadresB, mailgegevensB

en vervolgens wil je deze mailtjes een voor een versturen en uitprinten. hiervoor is de with funtie uit het eerste mail voorbeeld nodig.


probeer aan het begin even dim r as recordset toe te voegen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan