View Single Post
  #2   Report Post  
Posted to microsoft.public.word.oleinterop,microsoft.public.word.formatting.longdocs,microsoft.public.word.docmanagement
macropod macropod is offline
external usenet poster
 
Posts: 1,002
Default Using DOCPROPERTY in LINK field

Hi Jose,

The short answer is no. For whatever reason, LINK fields behave different to INCLUDEPICTURE and INCLUDETEXT fields, swallowing any
other embedded fields every time the LINK field is updated. The only way around this at present is to use vba to recode/recreate the
field whenever the document is opened, updating the paths as you go.

Here's a macro to automatically reset all INCLUDEPICTURE, INCLUDETEXT, LINK, RD & HYPERLINK fields to point to the current folder.
You might like to modify it to point to a particular child/parent/sibling folder, perhaps using your DOCPROPERTY variable.

Option Explicit
Dim TrkStatus As Boolean ' Track Changes flag

Private Sub AutoOpen()
' This routine runs whenever the document is opened.
' It calls on the others to do the real work.
' Prepare the environment.
Call MacroEntry
' Most of the work is done by this routine.
Call UpdateFields
' Set the saved status of the document to true, so that changes via
' this code are ignored. Since the same changes will be made the
' next time the document is opened, saving them doesn't matter.
ActiveDocument.Saved = True
' Go to the start of the document
Selection.HomeKey Unit:=wdStory
' Clean up and exit.
Call MacroExit
End Sub

Private Sub MacroEntry()
' Store current Track Changes status, then switch off temporarily.
With ActiveDocument
TrkStatus = .TrackRevisions
.TrackRevisions = False
End With
' Turn Off Screen Updating temporarily.
Application.ScreenUpdating = False
End Sub

Private Sub MacroExit()
' Restore original Track Changes status
ActiveDocument.TrackRevisions = TrkStatus
' Restore Screen Updating
Application.ScreenUpdating = True
End Sub

Private Sub UpdateFields()
' This routine sets the new path for external links.
Dim oRange As Word.Range
Dim oField As Word.Field
Dim OldPath As String
Dim NewPath As String
' Set the new path
NewPath = Replace$(ActiveDocument.Path, "\", "\\")
' Go through all story ranges in the document, including shapes,
' headers & footers.
For Each oRange In ActiveDocument.StoryRanges
' Go through the fields in the story range.
For Each oField In oRange.Fields
With oField
' Skip over fields that don't have links to external files
If Not .LinkFormat Is Nothing Then
' Get the old path
OldPath = Replace(.LinkFormat.SourcePath, "\", "\\")
' Replace the link to the external file
.Code.Text = Replace(.Code.Text, OldPath, NewPath)
End If
End With
Next oField
Next oRange
End Sub

Amongst other things, the macro gives feedback on its progress.

To make the macro update only LINK fields, you'd change the line:
If Not .LinkFormat Is Nothing Then
to
If .Type = wdFieldLink Then

Cheers

--
macropod
[MVP - Microsoft Word]
-------------------------

"Jose Valdes" wrote in message ...
I am writing a long manual in MS-Word 2003 that uses OLE links to MS-Excel files. Here's an example of one of my links:

{ LINK Excel.Sheet.8 "{ DOCPROPERTY home_folder}RMS 2400\\Book files\\Linked_files\\2400\\Section_2.doc\\RMS_2400 _Slip_Die.xls"
"Body" \a \f 0 \p }

In this example, please note that I use a custom document property, "home_folder", to store the directory path to the Excel file,
"RMS_2400_Slip_Die.xls". The following example shows the link with the value of the DOCPROPERTY:

{ LINK Excel.Sheet.8 "G:\\TRS_Engineering\\Operations manuals\\Work in progress\\RMS 2400\\Book
files\\Linked_files\\2400\\Section_2.doc\\RMS_2400 _Slip_Die.xls" "Body" \a \f 0 \p }

I thought I was pretty smart when I developed this plan, but Word has won another round against me. ;-) Every time I update the
previous link, Word helpfully renames the directory path to the following:

{ LINK Excel.Sheet.8 "\\\\spencerroad1\\groups\\TRS_Engineering\\Operat ions manuals\\Work in progress\\RMS 2400\\Book
files\\Linked_files\\2400\\Section_2.doc\\RMS_2400 _Slip_Die.xls" Body \a \f 0 \p }

The new directory path is correct and displays the Excel file as it should. It does not, however, use the DOCPROPERTY. When it was
time to move the word file to another computer, I was hoping to change the DOCPROPERTY and re-define all of these links. This plan
has so far worked for the INCLUDEPICTURE and INCLUDETEXT fields. Can I make it work with the LINK field as well?