View Single Post
  #3   Report Post  
Peter Jamieson
 
Posts: n/a
Default

As Doug says, you will probably need Word XP SP2 or later to make this work
at all, but...

From an old post of mine, slightly edited:

You /may/ be able to get what you want using fields, and someone may come
along and suggest how to do that. But I think you will need to use VBA and
the mailmerge events.If you're familiar with VBA, I suggest you try the
following experiment. If you're familiar with Events, you can probably skip
some of this stuff.

The overview is as follows:
a. In your mail merge main document, you will have a bookmark named "mybm"
that specifies where you want the hyperlink to go
b. also in the document, you have a class module with a routine that
responds to the Mailmerge "Before Record Merge" event. This routine will
insert a hyperlink at the specified point, using data from the current
record in the data source
c. Also in the document, you have a module with an AutoOpen routine that
creates an instance of your class and initialises event handling.

I'm not a VBA expert so please don't regard the following code as
"polished" - you may need to add error handling and so on before it will all
work reliably for you or your users.

So...

1. Create a new document, connect it to your data source, and insert one
merge field and a bookmark named "mybm"

2. Open up the VBA Editor and
a. insert a class module.
b. name it EventClassModule in the properties box
c. Copy the following code into the module:

Public WithEvents App As Word.Application

Private Sub App_MailMergeBeforeRecordMerge(BYVal Doc As Document, Cancel As
Boolean)
Dim dt as String
Dim lt as String
Dim h as Hyperlink
Dim r as Range

' set the range variable to our placeholder bookmark
Set r = Doc.Bookmarks("mybm").Range

' delete any existing text (this is needed for records after record 1)
r.Text = ""

' construct the link text that you want. I'm assuming your data source has
fields called idfield and namefield
lt = http://www.testsite.com?id= & _
Doc.MailMerge.DataSource.DataFields("idfield") & _
"&name=" & _
Doc.MailMerge.DataSource.DataFields("namefield")
' set up the display text that you want. If it should be the same as the
link text, do that:
dt = lt

' insert the hyperlink you want
Set h = Doc.Hyperlinks.Add(Anchor:=r, Address=lt, TextToDisplay:=dt)

' Set mybm to "cover" the inserted link so it is easy to delete the old
hyperlink

Doc.Bookmarks.Add Name:="mybm", Range:=h.Range

Set r = Nothing
Set h = Nothing

End Sub

3. Insert an ordinary module (the name does not matter) and insert the
following code:

Dim x As New EventClassModule

Sub autoopen()
Set x.App = Word.Application
End Sub

4. Save and close the document. Open it to trigger the autoopen, then
perform a test merge.

NB, if you start changing the code you may find that you need to re-run your
autoopen code again, and/or save/close/open the document.


--
Peter Jamieson

"ric" wrote in message
...
mail merge in word should allow hyperlinks to be obtained from a data
source.

for example i had the need to send special pages to a large number of
people
with a link in it that would redirect to a special personal page through
an
URL string.. (www.server.com/default.asp?ID=ID from Database for each
contact)