Hi il barbi,
Add the following vba code to your document:
Option Explicit
Public SFileName As String, FieldType As String, OldPath As String
Sub AutoOpen()
' This routine runs whenever the document is opened. It mainly performs a set of housekeeping functions.
' Most of the work is done by the UpdateFields and GetSourceFileName routines.
Dim sBar As Boolean, oSection As Section, shp As Shape, oHeadFoot As HeaderFooter
sBar = Application.DisplayStatusBar ' Store StatusBar visibility condition
Application.DisplayStatusBar = True ' Make StatusBar visible
Application.ScreenUpdating = False ' Minimise screen flicker
Selection.EndKey Unit:=wdStory
ActiveWindow.View.ShowFieldCodes = True
Call UpdateFields
' Set the saved status of the document to true, so that path update changes via this macro are ignored.
' Since they'll be recreated the next time the document is opened, saving such changes doesn't really matter.
' Then clean up and exit
ActiveWindow.View.ShowFieldCodes = False
On Error Resume Next ' In case there's only one active pane
ActiveWindow.ActivePane.Close
If ActiveWindow.View.SplitSpecial = wdPaneNone Then
ActiveWindow.ActivePane.View.Type = wdPrintView
Else
ActiveWindow.View.Type = wdPrintView
End If
ActiveDocument.Saved = True
Application.DisplayStatusBar = sBar ' Restore StatusBar to original visibility condition
Selection.HomeKey Unit:=wdStory
Application.ScreenUpdating = True
End Sub
Private Sub UpdateFields()
' This routine sets the new path for external field references, calls the GetSourceFileName routine to get the
' link's filename, plus any bookmarks and switches from the original field then merges these into a new field.
Dim wdRange As Range, FieldCount As Integer, NewPath As String, NewField As String
' Get the new path
NewPath = Replace$(ActiveDocument.Path, "\", "\\") & "\\"
' Go through the document, updating all external field links with the new path.
For Each wdRange In ActiveDocument.StoryRanges
If wdRange.Fields.Count > 0 Then
For FieldCount = wdRange.Fields.Count To 1 Step -1
wdRange.Fields(FieldCount).Select
With wdRange.Fields(FieldCount)
Select Case True
Case .Type = wdFieldHyperlink
FieldType = "HYPERLINK"
Case .Type = wdFieldIncludeText
FieldType = "INCLUDETEXT"
Case .Type = wdFieldIncludePicture
FieldType = "INCLUDEPICTURE"
Case .Type = wdFieldLink
FieldType = "LINK"
Case .Type = wdFieldRefDoc
FieldType = "RD"
Case Else
FieldType = ""
End Select
End With
If FieldType <> "" Then
Call GetSourceFileName
' Don't bother doing anything if the paths are the same
If OldPath <> NewPath Then
' Compile the new field's code
NewField = FieldType & " " & """" & NewPath & SFileName
Application.StatusBar = "Updating " & SFileName ' Show progress on status bar
' Replace the old field with the new one
With Selection
.Delete
.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:=NewField, PreserveFormatting:=False
End With
End If
End If
Next FieldCount
End If
Next wdRange
Application.StatusBar = "Finished!"
End Sub
Private Sub GetSourceFileName()
' This routine gets the source file's name, plus any bookmarks and switches from the original field.
Dim CharPos As Integer
SFileName = Selection
For CharPos = Len(SFileName) To 0 Step -1
On Error Resume Next 'In case there's no path
If Mid(SFileName, CharPos, 2) = "\\" Then
SFileName = Mid(SFileName, CharPos + 2)
Exit For
End If
Next CharPos
' Delete any extra spaces on the right, but preserve leading & internal spacing.
SFileName = RTrim(Replace$(SFileName, Chr(21), ""))
' Extract the old path for testing
OldPath = Trim(Replace(Replace(Mid(Selection, 2, CharPos), FieldType, ""), """", ""))
End Sub
To add the code to your document:
.. press Alt-F11 to open the vba editor
.. click Insert|Modue
.. copy & paste the code
.. exit the vba editor
.. save the document
Provided you allow Word to run macros when you open this document, the code runs automatically.
Cheers
--
macropod
[MVP - Microsoft Word]
| I've got a file .doc where I want to insert some linked jpeg images that
| reside in the same directory or in a subdirectory, but I'd like possibly to
| move my file carrying with it all images and I don't want to be obliged to
| change the pathname of the linked jpegs in the .doc. To do so it should be
| possible to express the pathname of the linked images in a relative way,
| while it seems to me it is only permitted in an absolute way.
| In some way this the same thing as for a htlm page that is made of a .htm
| file and a directory - but there you can move both freely
| il barbi
|
|
|