OdeMonkey
asked on
Use Access 2010 to create a mailmerge with Word 2010
I am updating from Office 2003 to Office 2010 and moving from a .mdb to a .accdb. The problem I have encountered is that the code is not able to open the database. I get this Message "Word was unable to open the data source." I have confirmed that the .OpenDataSource Name and sqlstatement values are correct and that the document file exists. I have also tested the SQL to verify that it works and returns records. I have included below the function that is used to access Word and create the document. This code has worked inheeh earlier version.
What do I need to do to allow Word to access the database?
Thanks,
Dan
What do I need to do to allow Word to access the database?
Thanks,
Dan
Public Function docPrinter(inDoc As String, inSQL As String, inDB As String, _
inCnt As Integer, inPref As Boolean)
' Prints (or opens) the selected document where
' inDoc is the fully-qualified location of the document to be printed,
' inSQL is the complete SQL statement that will retrieve the correct records,
' inDB is the fully-qualified location of the database to be queried,
' inCnt is the number of copies required (ignored if the document is to be opened), and
' inPref is true if direct printing is desired (false will open the document in Word).
'
' Examples:
' inDoc = "C:\2009 Non-Certified Contract.doc"
' inSQL = "SELECT * FROM Combined WHERE [Contract Type] in ('N')"
' inDB = "C:\$User\Business Office\EmployeeContractsData.mdb"
Debug.Print inDoc
Debug.Print inSQL
Debug.Print inDB
Dim myWord As Object
Dim i As Integer
Set myWord = CreateObject("Word.Application")
myWord.Documents.Open inDoc, , True
With myWord.ActiveDocument.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource Name:=inDB, sqlstatement:=inSQL
.ViewMailMergeFieldCodes = False
' Determine the actions to take (Print or Open).
If inPref Then
' Print the document
.Destination = wdSendToPrinter
For i = 1 To inCnt
.Execute pause:=False 'This will cause the output to be collated in complete sets.
Next i
docPrinter = "Printing is Done"
Else
' Open the document with the merge completed.
.Destination = wdSendToNewDocument
.Execute pause:=False
With myWord.Application
.DisplayAlerts = wdAlertsNone
.Visible = True
.WindowState = wdWindowStateMaximize
End With
docPrinter = "Document is open"
End If
End With
myWord.Documents(inDoc).Close savechanges:=wdDoNotSaveChanges
' Housekeeping...
Set myWord = Nothing
End Function
ASKER
Here are the values as they arrived in the call to docPrinter:
inDoc = C:\Contracts\Document Templates\2011\2011 Payroll Start Order with YTD Info.doc
inSQL = SELECT * FROM Combined WHERE SSN = '275-44-1234'
inDB = C:\Contracts\Data\Employee ContractsD ata2011.ac cdb
inCnt = 3
inPref = True
inDoc = C:\Contracts\Document Templates\2011\2011 Payroll Start Order with YTD Info.doc
inSQL = SELECT * FROM Combined WHERE SSN = '275-44-1234'
inDB = C:\Contracts\Data\Employee
inCnt = 3
inPref = True
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Nick67
The brackets around the table names solved the problem! It does seem VERY picky. I know it took some work on your part to help with this one. Sorry it took so long for me to respond. I have myriad responsibilities and I didn't get to try your suggestion until moments ago.
Thanks again!
Dan
The brackets around the table names solved the problem! It does seem VERY picky. I know it took some work on your part to help with this one. Sorry it took so long for me to respond. I have myriad responsibilities and I didn't get to try your suggestion until moments ago.
Thanks again!
Dan
No Biggie.
Glad you got it cased
Glad you got it cased
Show us what you are actually passing into this function.
The code looks okay, but it's only half the puzzle