From a couple of older posts of mine...
-----------------------------------
There are at least two different problems here:
a. Word doesn't recognise the datatype "Hyperlink" (i.e. does not
treat the
contents as a hyperlink). It just treats the content of the field as text.
b. if you are trying to use a Hyperlink field to generate a proper
hyperlink in Word, the usual problem is that when you merge, the /display
text/ of the field remains the same even when the data is different in every
record. This is simply because there is no way to specify the display text
in the field code - you can only do it programmatically, e.g. via VBA.
As far as extracting the hyperlink from Access is concerned, you can do it
in an Access query and use that query as the data source for your merge. As
far as I can tell, hyperlinks are basically stored as
displaytext#linktext
e.g. if the hyperlink column is called h, your query SQL could be something
like
SELECT Mid(h, instr(1, h, '#') + 1, Len(h) - instr(1,h,'#') - 1) as
hyperurl, * FROM mytable
then you can insert the link using a nested field, e.g.
{ HYPERLINK "{ MERGEFIELD hyperurl }" }
or it may be better to insert the linktext directly using
{ MERGEFIELD hyperurl }
and find some way to get Word to convert the text to proper hyperlinks
(probably by mucking around with the Autoformat options).
-----------------------------------
-----------------------------------
I think you have to use Word Mail Merge events for this. I have not tested
this recently, but for example:
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 a field called WEBADDRESS for the link. NB, these field names
' are case-sensitive.
lt = Doc.MailMerge.DataSource.DataFields("WEBADDRESS")
' set up the display text that you want. I assuming you have a field
' called WEBTEXT
dt = Doc.MailMerge.DataSource.DataFields("WEBTEXT")
' 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. You should realise
that
once you have enabled the events, they apply to any document until either
you or
Word has disabled them again. This is why I do not particularly like using
Events, but even so,
I suspect that this is the easiest way to perform this particular task in
Word.
--------------------------
Once you are committed to using VBA to process mailmerge events, you may
find it is easier to split the Access hyperlink in the event handling
VBA, rather than issuing SQL stuff to do it.
Sorry it's a bit scrappy...
Peter Jamieson
http://tips.pjmsn.me.uk