[AccessD] Word templates from Access

Brett Barabash BBarabash at TappeConstruction.com
Mon Dec 1 13:26:28 CST 2003


Mark,
First and foremost, use a text file as your mail merge data source.  Having
gone down this painful path, I can tell you that trying to link to Access
data from is no fun!

I normally use non-standard delimiters for my fields and records.  By
default, Word uses Tabs to delimit fields and Carriage Returns for
delimiting records.  By using something else (in my case tildes and carats),
I can merge in lists, paragraph blocks, or whatever else I want (as long as
it doesn't contain ~ or ^).

That being said, here is some code that I posted a while back, that will
generate a mail merge text file based off of any Table or QueryDef:

Public Sub CreateMergeDataSource(ByVal strTblQry As String, ByVal
strFilePath As String)

    Const cFieldDelim = "~"
    Const cRecordDelim = "^"
    
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim fld As DAO.Field
    Dim lngFileNo As Long
    Dim strBuffer As String
    
    Set db = CurrentDb()
    Set rs = db.OpenRecordset(strTblQry, dbOpenSnapshot)
    
    'Initialize field name list (first line of data source)
    For Each fld In rs.Fields
        Select Case fld.Type
        Case dbGUID, dbLongBinary, dbMemo
            'Do not include these types of fields
        Case Else
            strBuffer = strBuffer & Chr$(34) & fld.Name & Chr$(34) &
cFieldDelim
        End Select
    Next fld
    
    strBuffer = strBuffer & cRecordDelim
    
    'Loop through all records in source table/query
    Do Until rs.EOF
        For Each fld In rs.Fields
            Select Case fld.Type
            Case dbGUID, dbLongBinary, dbMemo
                'Do not include these types of fields
            Case Else
                strBuffer = strBuffer & Chr$(34) & fld.Value & Chr$(34) &
cFieldDelim
            End Select
        Next fld
        
        strBuffer = strBuffer & cRecordDelim
        rs.MoveNext
    Loop
    
    rs.Close
    
    'Generate data source text file
    lngFileNo = FreeFile
    Open strFilePath For Output As #lngFileNo
    Print #lngFileNo, strBuffer
    Close #lngFileNo
    
    Set rs = Nothing
    Set db = Nothing
    
End Sub

I don't have the actual automation code handy, but it should be something
like this (I haven't tested the code below, possibly someone else can share
their secret recipe):

Dim wdApp As Word.Application
Dim wdDoc As Word.Document

Set wdApp = New Word.Application
Set wdDoc = wdApp.Open "c:\mydir\mytemplate.doc"

With wdDoc.MailMerge
    .MainDocumentType = wdFormLetters
    .OpenDataSource Name:=c:\mydir\mysource.txt, Format:=wdOpenFormatText
    .Destination = wdSendToNewDocument
    .Execute
End With

wdApp.UserControl = True
wdApp.Visible = True

Set wdApp = Nothing
Set wdDoc = Nothing

-----Original Message-----
From: Porter, Mark [mailto:MPorter at acsalaska.com]
Sent: Monday, December 01, 2003 12:22 PM
To: 'Access Developers discussion and problem solving'
Subject: RE: [AccessD] Word templates from Access



Does anyone have any code snippets that shows how to send an Access querydef
to a Word mail merge template?

I have a client with quite a few form letters they would like to send data
too.

Mark

--------------------------------------------------------------------------------------------------------------------
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom
they are addressed.
If you have received this email in error please notify the
originator of the message. This footer also confirms that this
email message has been scanned for the presence of computer viruses.

Any views expressed in this message are those of the individual
sender, except where the sender specifies and with authority,
states them to be the views of Tappe Construction Co.

Scanning of this message and addition of this footer is performed
by SurfControl E-mail Filter software in conjunction with 
virus detection software.



More information about the AccessD mailing list