BTW, the article I referenced is actually at
http://tips.pjmsn.me.uk/t0001.htm
Other than helping the "merge to fax" facilities reappear in Word, the
MSMAIL.INI thing doesn't do a whole lot. But the solution proposed does
not rely on anything in Outlook at all - just the windows fax service.
If you can't reach the link, the core of the article is here...
------------------------------
A macro for simple merges to fax
You may be able to get a third-party solution such as Winfax. I can't
help you there.
If you want to merge to a faxmodem and your merge is fairly simple (one
fax for each record in the data source) you could try the following
macro. However, in Windows 2000 you may need to install the Windows fax
software first. To do that. try Control Panel|Add/Remove
programs|Add/Remove Windows Components first.
If you're going to try the macro, please read the notes, modify the
macro to suit your needs, and test it. The macro seems to have worked
for other users.
If you're unfamiliar with VBA, getting this to work could be quite
difficult. A useful starting point is the Word MVPs site at
http://word.mvps.org/ and specifically the following "get-you-started"
article
http://word.mvps.org/word/FAQs/ÂMacrosVBA/CreateAMacro.htm
You can also download a Word 2003 document containing the macros by
right-clicking this link.
Finally, I was unable to make this macro work on client computers
connected to the Shared Fax Service that is provided as part of
Microsoft's Small Business Server 2003 (SBS). As far as I can tell the
problem is that the old fax objects are unable to connect to the fax
server, so I have written a further macro that uses the new fax objects
which appear to overcome this problem. However, because the new fax
objects are only provided with Windows XP (and later) I do not have a
method which will definitely allow a Windows 2000 user to send faxes via
the SBS fax server, and I have no way of testing what happens with
earlier versions of SBS.
Here is the code for the original macro:
Sub MergeOneFaxPerSourceRec()
' Disclaimer: Use this macro at your own risk.
'
' Purpose: Perform one Word mailmerge for each record in
' a Word data source, sending the results of each merge
' to a different fax number specified in a column of the
' the data source
'
' Author: Peter J Jamieson
'
' Date: November 2003
'
' Assumes:-
' Word 2000 or later (Word 97 might work)
' Windows 2000 or later, with the standard fax service
' software installed and configured to use a working fax
' device
' You have used Tools|References in the VBA editor to
' add the appropriate type library, which is:
' "Faxcom 1.0 Type Library"
' You correctly adapt the macro to your environment
' Overview:-
' The routine performs one merge per record in the data
' source. For each merge, the macro:
' - creates a new Word document
' - "prints" the document to the Fax printer, but
' outputting the result to a .tif file rather than
' allowing the fax printer to send the fax directly.
' This allows us to specify the fax number etc. in the
' macro rather than having to respond to the fax
' printer's dialog box.
' - submits the tif file to the fax service
' - discards the Word document
'
' Notes:-
' This does not use the Extended Fax client API
' because it is not available in Windows 2000.
'
' This macro relies on the fax service to deliver the
' faxes once they have been submitted. You should use
' the fax service to verify which faxes have been sent
' and which, if any, failed. The fax service should
' retain a copy of each fax submitted so that
' retransmission should be feasible from within the
' service, i.e. without re-running the merge.
'
' NB, this macro needs bettor error management and
' doubtless other things a VBA expert would point out.
'
'
' Specify the path for the .tif files saved by the Fax Printer
' This path must exist and the name should end with "\"
Const sTifFolder = "c:\tif\"
' Specify the name of the .tif file to output
Const sTifFile = "mergetif.tif"
' Specify the fax printer name that makes it all work
Const sFaxPrinter = "Fax"
Dim bFaxPortAvailable As Boolean
Dim bFaxServerAvailable As Boolean
Dim bTerminateMerge As Boolean
Dim lJobID As Long
Dim lSourceRecord As Long
Dim oApp As Word.Application
Dim oDataFields As Word.MailMergeDataFields
Dim oDoc As Word.Document
Dim oFaxDoc As FAXCOMLib.FaxDoc
Dim oFaxPort As FAXCOMLib.FaxPort
Dim oFaxPorts As FAXCOMLib.FaxPorts
Dim oFaxServer As FAXCOMLib.FaxServer
Dim oMerge As Word.MailMerge
Dim sActivePrinter As String
Dim sTifPath As String
' Phase 1.
' Connect to the Fax server
' and optionally see if a Port is available
Set oFaxServer = CreateObject("FaxServer.FaxSerÂver")
If oFaxServer Is Nothing Then
MsgBox "Could not create a fax server object"
bFaxServerAvailable = False
Else
' This should connect us to the fax server on the current machine
oFaxServer.Connect Servername:=Environ("computernÂame")
bFaxServerAvailable = True
bFaxPortAvailable = True
' begin optional section
' - ensure that at least one output port is available
' - not essential but we will just see an error later
' if no output port is available
Set oFaxPorts = oFaxServer.GetPorts
If oFaxPorts.Count = 0 Then
MsgBox "The fax server has no fax devices"
bFaxPortAvailable = False
Else
' look for a port that can send
For i = 1 To oFaxPorts.Count
Set oFaxPort = oFaxPorts.Item(i)
If oFaxPort.Send = 0 Then
Set oFaxPort = Nothing
Else
Exit For
End If
Next
If oFaxPort Is Nothing Then
MsgBox "The fax server has no ports configured to send faxes"
bFaxPortAvailable = False
Else
' at the moment we do not use the FaxPort object to get status
' info. so just get rid of it
Set oFaxPort = Nothing
End If
End If
' we do not need this either
Set oFaxPorts = Nothing
' end optional section
End If
' Phase 2.
' We can fax, so set up the printer
' and start the merges.
If bFaxServerAvailable And bFaxPortAvailable Then
' You may need to change this
Set oApp = Application
' The mail merge main document is assumed
' to be the active document in the current
' instance of Word
Set oDoc = oApp.ActiveDocument
Set oMerge = oDoc.MailMerge
Set oDataFields = oMerge.DataSource.DataFields
' save and set up the active printer
sActivePrinter = oApp.ActivePrinter
' don't change the printer if it is already
' correctly set up
' (I had problems when I tried to switch
' to the fax printer in code)
' you may need to adjust this for your
' fax printer name
If Left(sActivePrinter, 3) <> sFaxPrinter Then
oApp.ActivePrinter = sFaxPrinter
End If
With oMerge
' If no data source has been defined,
' do it here using OpenDataSource.
' But if it is already defined in the document,
' you should not need to define it here.
' .OpenDataSource _
' Name:="whatever"
lSourceRecord = 1
bTerminateMerge = False
Do Until bTerminateMerge
.DataSource.ActiveRecord = lSourceRecord
' if we have gone past the end
' (and possibly, if there are no records)
' then the Activerecord will not be what
' we have just tried to set it to
If .DataSource.ActiveRecord <> lSourceRecord Then
bTerminateMerge = True
Else
.DataSource.FirstRecord = lSourceRecord
.DataSource.LastRecord = lSourceRecord
.Destination = wdSendToNewDocument
.Execute
' Word always sets the output document produced
' by the merge to be the ActiveDocument
' Now print to the fax printer, specifying an
' OutputFileName.
' Specifying Background:=False is
' particularly important or the fax stage
' will fail later
' create the full path name for the file.
' (done separately so you can change the way
' you create the name and re-use the name later)
sTifPath = sTifFolder + sTifFile
oApp.PrintOut _
Background:=False, _
Append:=False, _
Range:=wdPrintAllDocument, _
OutputFileName:=sTifPath, _
Item:=wdPrintDocumentContent, _
Copies:=1, _
PageType:=wdPrintAllPages, _
PrintToFile:=True
' Don't need the document any more
oApp.ActiveDocument.Close Savechanges:=False
' Now make a FaxDocument
Set oFaxDoc = oFaxServer.CreateDocument(sTifÂPath)
If oFaxDoc Is Nothing Then
MsgBox "Could not create the fax document"
' you could consider finishing here by setting
' TerminateMerge = True
Else
' fill in whatever details you need
' from the data source or elsewhere
With oFaxDoc
' The number to send to. The only really essential
' piece of information. Here we get it from
' a field in the data source called "faxnumber"
.FaxNumber = oDataFields("faxnumber")
' DisplayName is a "user-friendly" name used
' by the Fax Server when you e.g. inspect the
' current fax status
' here we get it from a field in the data source
' called ufname
.DisplayName = oDataFields("ufname")
' here we just set it to ""
'.DisplayName = ""
' If you want a cover page, set SendCoverPage
' to a nonzero value. You could define whether
' or not you want a cover page, and which
' page to use, in your data source. However,
' if you specify a cover page, you /must/
' provide a valid name for the page. This code
' does not verify whether you do or not.
.SendCoverpage = 0
' If the cover page (.cov file) is a common
' cover page located on the server (i.e. in the
' default folder), set ServerCoverPage=-1
' and provide the name of the cover page
' If the cover page is somewhere else,
' set ServerCoverPage=0 and specify the
' full path name of the cover page
.ServerCoverpage = 1
.CoverpageName = ""
' The following items may be used in the coverpage
' or they may be displayed in fax service status
' dialog boxes. The items visible in the Win2000
' fax status are indicated by
'** displayed in dialog
.CoverpageNote = ""
.CoverpageSubject = ""
.EmailAddress = ""
.RecipientAddress = ""
.RecipientCity = ""
.RecipientCompany = ""
.RecipientCountry = ""
.RecipientDepartment = ""
.RecipientHomePhone = ""
'** displayed in dialog
.RecipientName = ""
.RecipientOffice = ""
.RecipientOfficePhone = ""
.RecipientState = ""
.RecipientTitle = ""
.RecipientZip = ""
.SenderAddress = ""
'** displayed in dialog
.SenderCompany = ""
'** displayed in dialog
.SenderDepartment = ""
.SenderFax = ""
.SenderHomePhone = ""
'** displayed in dialog
.SenderName = ""
.SenderOffice = ""
.SenderOfficePhone = ""
.SenderTitle = ""
'** displayed in dialog
.BillingCode = ""
' DiscountSend = 0 means "send immediately
' If you have set up discount periods, setting
' DiscountSend to a nonzero value will make the
' fax service send in a discount period
.DiscountSend = 0
' In theory, the TSID is the Fax sender ID printed
' on the fax, i.e. typically your contact fax number,
' but the value set up in the fax service appears to
' override any value set here.
'.Tsid = ""
End With
' Now send the thing. We don't actually do anything
' with the ID except check it is nonzero
lJobID = oFaxDoc.Send()
Set oFaxDoc = Nothing
End If
End If
' move to the next record
lSourceRecord = lSourceRecord + 1
Loop
End With
' All done. Restore the previous printer
' if necessary. You may need to tweak this
If Left(sActivePrinter, 3) <> sFaxPrinter Then
oApp.ActivePrinter = sActivePrinter
End If
Set oDataFields = Nothing
Set oMerge = Nothing
Set oDoc = Nothing
'Set oApp = Nothing
End If
If bFaxServerAvailable Then
oFaxServer.Disconnect
Set oFaxServer = Nothing
End If
End Sub
------------------------------
Peter Jamieson
http://tips.pjmsn.me.uk
Thanks for this information but it only worked out one step.
I have set up a MSMAIL.INI file and this makes sure that word 2007 sents my
mail merge document to Outlook, although it gives me the message that outlook
does not recognize a number and needs and email.
Now when I want to set up a Fax Transporter in my outlook profile it only
gives me the choice of
1) MS Office Outlook connector
2) Outlook Mobile service
I do have Windows Fax and sending one document via this program is not a
problem. But can I also use it for sending mail merge documents.
Richard
Russ Valentine said:
One other thing: most Vista users assume they still have fax software, but
of course most don't thanks to the geniuses in Microsoft's marketing
department.
--
Russ Valentine
[MVP-Outlook]
Peter Jamieson said:
You can try the approach at
http://tips.pjmsn.me.uk/ but I do not know if
it still works with Vista and/or Word 2007.
Peter Jamieson
http://tips.pjmsn.me.uk
klitsier wrote:
I want to merge mail a word (2007 on Vista) document and sent it directly
to a fax number as per the mail merge fields. Can anybody tell me how I
can achieve this? Also I was reading that you can add Fax Transporter in
your Outlook Profile but that option does not show up if I add account in
my profile