Q
Question Boy
Hello,
I am using Albert D. Kallal Mail Merge and need to then send the merged
document and the body of an e-mail while preserving the formatting of the
text.
Is there a way to modify the RidesMergeWord() to then use Word's Send To
....Mail Recipient function and insert an e-mail address in the TO fields and
a subject in the subject field?
Here is the function in question
Function RidesMergeWord(strDocName As String, _
strDataDir As String, _
Optional strOutDocName As String, _
Optional bolPrint As Boolean = False, _
Optional StrPrinter As String)
' This code takes a word document that has been setup as a MERGE document.
' This merge document is opened, then mailmerge is executed. The original
' document is then closed. The result is a raw word document with no
connectons
' to the merge.txt (a csv source data file).
'Parms:
' strDocName - full path name of word doc (.doc)
' strDataDir - dir (full path) where docuemnts and the
merge.888 file is placed
' strOutDocName - full path name of merged document (saved).
' bolPrint - if true, then output docuemnt is printed - if
strOutDocName is suppled then we close the docuemnt
' strPrinter - sends output to the printer name
'
'
' The above parms are suppled by other routines. You likey should not
need to call this
' routine directly. See the sub called MergeNoPrompts.
' Albert D. Kallal (c) 2001
' (e-mail address removed)
'
Dim wordApp As Object ' running instance of word
Dim WordDoc As Object ' one instance of a word doc
Dim WordDocM As Object ' one instance of a word doc
Dim strActiveDoc As String ' doc name (no path)
Dim lngWordDest As Long ' const for dest, 0 = new doc, 1 =
printer
' Dim MyPbar As New clsRidesPBar ' create a instance of our
Progress bar.
' MyPbar.ShowProgress
' MyPbar.TextMsg = "Launching Word...please wait..."
' MyPbar.Pmax = 4 ' 4 steps to inc
' MyPbar.IncOne ' step 1....start!
On Error GoTo CreateWordApp
Set wordApp = GetObject(, "Word.Application")
On Error Resume Next
' MyPbar.IncOne ' step 2, word is loaded.
Set WordDoc = wordApp.Documents.Open(strDocName)
' MyPbar.IncOne ' step 3, doc is loaded
strActiveDoc = wordApp.ActiveDocument.Name
'wordApp.Activate
If bolPrint = False Then
wordApp.Visible = True
wordApp.Activate
wordApp.WindowState = 0 'wdWindowStateRestore
End If
WordDoc.MailMerge.OpenDataSource _
Name:=strDataDir & TextMerge, _
ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="",
WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=0, _
Connection:="", SQLStatement:="", SQLStatement1:=""
With WordDoc.MailMerge
.Destination = 0 ' 0 = new doc
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .datasource
.FirstRecord = 1
' .LastRecord = 1
End With
.Execute Pause:=False
End With
Set WordDocM = wordApp.ActiveDocument
' MyPbar.IncOne ' step 4, doc is merged
WordDoc.Close (False)
wordApp.Visible = True
If strOutDocName <> "" Then
'wordApp.ActiveDocument.SaveAs strOutDocName
WordDocM.SaveAs strOutDocName
End If
If bolPrint = False Then
WordDocM.Activate
Else
' print this document
If StrPrinter <> "" Then
With wordApp.Dialogs(97) ' 97 - wdDialogFilePrintSetup
.Printer = StrPrinter
.DoNotSetAsSysDefault = True
.Execute
End With
End If
WordDocM.PrintOut
'If strOutDocName <> "" Then
'wordApp.ActiveDocument.Close (False)
' when we print...we *always* close the docuemnt..
WordDocM.Close (False)
'End If
wordApp.Visible = True
End If
' MyPbar.HideProgress
Set wordApp = Nothing
Set WordDoc = Nothing
Set WordDocM = Nothing
' Set MyPbar = Nothing
DoEvents
' If bolShowMerge = True Then
' WordApp.Dialogs(676).Show 'wdDialogMailMerge
' End If
Exit Function
CreateWordApp:
' this code is here to use the EXISTING copy of
' ms-access running. If getobject fails, then
' ms-word was NOT running. The below will then
' launch word
Set wordApp = CreateObject("Word.Application")
Resume Next
End Function
After the WordDocM.Activate can this be done?
Thank you,
QB
I am using Albert D. Kallal Mail Merge and need to then send the merged
document and the body of an e-mail while preserving the formatting of the
text.
Is there a way to modify the RidesMergeWord() to then use Word's Send To
....Mail Recipient function and insert an e-mail address in the TO fields and
a subject in the subject field?
Here is the function in question
Function RidesMergeWord(strDocName As String, _
strDataDir As String, _
Optional strOutDocName As String, _
Optional bolPrint As Boolean = False, _
Optional StrPrinter As String)
' This code takes a word document that has been setup as a MERGE document.
' This merge document is opened, then mailmerge is executed. The original
' document is then closed. The result is a raw word document with no
connectons
' to the merge.txt (a csv source data file).
'Parms:
' strDocName - full path name of word doc (.doc)
' strDataDir - dir (full path) where docuemnts and the
merge.888 file is placed
' strOutDocName - full path name of merged document (saved).
' bolPrint - if true, then output docuemnt is printed - if
strOutDocName is suppled then we close the docuemnt
' strPrinter - sends output to the printer name
'
'
' The above parms are suppled by other routines. You likey should not
need to call this
' routine directly. See the sub called MergeNoPrompts.
' Albert D. Kallal (c) 2001
' (e-mail address removed)
'
Dim wordApp As Object ' running instance of word
Dim WordDoc As Object ' one instance of a word doc
Dim WordDocM As Object ' one instance of a word doc
Dim strActiveDoc As String ' doc name (no path)
Dim lngWordDest As Long ' const for dest, 0 = new doc, 1 =
printer
' Dim MyPbar As New clsRidesPBar ' create a instance of our
Progress bar.
' MyPbar.ShowProgress
' MyPbar.TextMsg = "Launching Word...please wait..."
' MyPbar.Pmax = 4 ' 4 steps to inc
' MyPbar.IncOne ' step 1....start!
On Error GoTo CreateWordApp
Set wordApp = GetObject(, "Word.Application")
On Error Resume Next
' MyPbar.IncOne ' step 2, word is loaded.
Set WordDoc = wordApp.Documents.Open(strDocName)
' MyPbar.IncOne ' step 3, doc is loaded
strActiveDoc = wordApp.ActiveDocument.Name
'wordApp.Activate
If bolPrint = False Then
wordApp.Visible = True
wordApp.Activate
wordApp.WindowState = 0 'wdWindowStateRestore
End If
WordDoc.MailMerge.OpenDataSource _
Name:=strDataDir & TextMerge, _
ConfirmConversions:=False, _
ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="",
WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=0, _
Connection:="", SQLStatement:="", SQLStatement1:=""
With WordDoc.MailMerge
.Destination = 0 ' 0 = new doc
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .datasource
.FirstRecord = 1
' .LastRecord = 1
End With
.Execute Pause:=False
End With
Set WordDocM = wordApp.ActiveDocument
' MyPbar.IncOne ' step 4, doc is merged
WordDoc.Close (False)
wordApp.Visible = True
If strOutDocName <> "" Then
'wordApp.ActiveDocument.SaveAs strOutDocName
WordDocM.SaveAs strOutDocName
End If
If bolPrint = False Then
WordDocM.Activate
Else
' print this document
If StrPrinter <> "" Then
With wordApp.Dialogs(97) ' 97 - wdDialogFilePrintSetup
.Printer = StrPrinter
.DoNotSetAsSysDefault = True
.Execute
End With
End If
WordDocM.PrintOut
'If strOutDocName <> "" Then
'wordApp.ActiveDocument.Close (False)
' when we print...we *always* close the docuemnt..
WordDocM.Close (False)
'End If
wordApp.Visible = True
End If
' MyPbar.HideProgress
Set wordApp = Nothing
Set WordDoc = Nothing
Set WordDocM = Nothing
' Set MyPbar = Nothing
DoEvents
' If bolShowMerge = True Then
' WordApp.Dialogs(676).Show 'wdDialogMailMerge
' End If
Exit Function
CreateWordApp:
' this code is here to use the EXISTING copy of
' ms-access running. If getobject fails, then
' ms-word was NOT running. The below will then
' launch word
Set wordApp = CreateObject("Word.Application")
Resume Next
End Function
After the WordDocM.Activate can this be done?
Thank you,
QB