From: Robin on 23 Dec 2009 17:11 OK, I can try and explain the problem like this... A company has a set of 50 document templates. In each of these templates there are various images (pictures), for example a product logo, company logo etc. There may be as many as 10 of these images in each template, and nearly all are common to all templates. To make things easier we inserted these images as linked and embedded objects with the intention that we could just update the source image file (being linked to) and the new image would appear in the template(s). This is a classic situation where a company chnages its logo every few years. In theory this should work, but there are problems. The problem has arisen that some of the images have been used in Headers and Footers, and these Heasders and Footers have been included in the template's Building Blocks (and Quick Lists). We did this because some headers we need to replace on the fly, for example using a macro can change a Confidential Document header to an Internal Document header and thereby void having even more temples to cover each of these nuances. Now when we change the source file there are problems. Firstly the Building Block does not update with the new image, even though the Links dialog in the template shows there is a link to the image file. If I try to edit the link to point to a different image file (in the Links dialog) then Word crashes (Office 2007). As a last resort I want to try and edit the image file paths and file names programatically - that means using different image files, but maybe it will work. So that is why I want to access the path and file names and replace them. Any suggestions would be welcome. thanks Robin
From: Robin on 23 Dec 2009 17:12 OK, I can try and explain the problem like this... A company has a set of 50 document templates. In each of these templates there are various images (pictures), for example a product logo, company logo etc. There may be as many as 10 of these images in each template, and nearly all are common to all templates. To make things easier we inserted these images as linked and embedded objects with the intention that we could just update the source image file (being linked to) and the new image would appear in the template(s). This is a classic situation where a company chnages its logo every few years. In theory this should work, but there are problems. The problem has arisen that some of the images have been used in Headers and Footers, and these Heasders and Footers have been included in the template's Building Blocks (and Quick Lists). We did this because some headers we need to replace on the fly, for example using a macro can change a Confidential Document header to an Internal Document header and thereby void having even more temples to cover each of these nuances. Now when we change the source file there are problems. Firstly the Building Block does not update with the new image, even though the Links dialog in the template shows there is a link to the image file. If I try to edit the link to point to a different image file (in the Links dialog) then Word crashes (Office 2007). As a last resort I want to try and edit the image file paths and file names programatically - that means using different image files, but maybe it will work. So that is why I want to access the path and file names and replace them. Any suggestions would be welcome. thanks Robin
From: macropod on 23 Dec 2009 21:39 > If I try to edit the link to point to a different image file (in the Links dialog) then Word crashes (Office 2007). OK, Is your Word installation fully updated (SP2+)? Have you tried repairing it (Word Options|Resources|Detect & Repair)? Beyond that, try the following code, which is based on the link I posted previously, plus the alterations I suggested in my previous posts: Option Explicit ' Word macro to automatically update IncludePicture field links. ' Created by macropod. Dim TrkStatus As Boolean ' Track Changes flag Dim Pwd As String ' String variable to hold passwords for protected documents Dim pState As Boolean ' Document protection state flag Sub ChangePicLinks() ' This routine runs whenever the document is opened. ' It calls on the others to do the real work. ' Prepare the environment. With ActiveDocument ' Insert your document's password between the double quotes on the next line Pwd = "" ' Initialise the protection state pState = False ' If the document is protected, unprotect it If .ProtectionType <> wdNoProtection Then ' Update the protection state pState = True ' Unprotect the document .Unprotect Pwd End If Call MacroEntry ' Most of the work is done by this routine. Call UpdateIncludePictureFields ' Go to the start of the document Selection.HomeKey Unit:=wdStory ' Clean up and exit. Call MacroExit ' If the document was protected, reprotect it, preserving any formfield contents If pState = True Then .Protect wdAllowOnlyFormFields, Noreset:=True, Password:=Pwd End With 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 UpdateIncludePictureFields() ' This routine sets the new path for external links, pointing them to the current folder. Dim oRange As Range Dim oField As Field Dim OldPath As String Dim NewPath As String Dim OldFile As String Dim NewFile As String ' 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 image files. If .Type = wdFieldIncludePicture Then ' Get the old path OldPath = .LinkFormat.SourcePath ' Get the old filename OldFile = .LinkFormat.SourceName ' Get the new path. GetPath: NewPath = InputBox("The document contains a link to an image named:" _ & vbCr & OldFile & vbCr & "in the folder below." & vbCr & _ "What is the new Path?", "Change File Path", OldPath) If NewPath = "" Or InStr(NewPath, ":") = 0 Then GoTo GetPath OldPath = Replace(.LinkFormat.SourcePath, "\", "\\") ' Get the new filename GetName: NewFile = InputBox("What is the new Filename?", "Change Filename", OldFile) If NewFile = "" Or InStr(NewFile, ".") = 0 Then GoTo GetName ' Replace the link to the external file .Code.Text = Replace(.Code.Text, OldPath & "\\" & OldFile, NewPath & "\\" & NewFile) .Update End If End With Next oField Next oRange End Sub Place the code in your document's template (or Normal.dot/dotm), then activate the document to be updated and run the macro 'ChangePicLinks'. -- Cheers macropod [Microsoft MVP - Word] "Robin" <Robin(a)discussions.microsoft.com> wrote in message news:E986F956-F58D-4149-81FF-366CB02C37C3(a)microsoft.com... > OK, I can try and explain the problem like this... > > A company has a set of 50 document templates. In each of these templates > there are various images (pictures), for example a product logo, company logo > etc. There may be as many as 10 of these images in each template, and nearly > all are common to all templates. To make things easier we inserted these > images as linked and embedded objects with the intention that we could just > update the source image file (being linked to) and the new image would appear > in the template(s). This is a classic situation where a company chnages its > logo every few years. In theory this should work, but there are problems. > > The problem has arisen that some of the images have been used in Headers and > Footers, and these Heasders and Footers have been included in the template's > Building Blocks (and Quick Lists). We did this because some headers we need > to replace on the fly, for example using a macro can change a Confidential > Document header to an Internal Document header and thereby void having even > more temples to cover each of these nuances. Now when we change the source > file there are problems. Firstly the Building Block does not update with the > new image, even though the Links dialog in the template shows there is a link > to the image file. If I try to edit the link to point to a different image > file (in the Links dialog) then Word crashes (Office 2007). > > As a last resort I want to try and edit the image file paths and file names > programatically - that means using different image files, but maybe it will > work. So that is why I want to access the path and file names and replace > them. Any suggestions would be welcome. > > thanks > Robin
From: Robin on 24 Dec 2009 01:24 Hi Macropod, I have checked and diagnosed my Word 2007 - no problems and I'm using the latest SP2. I have tried the macro you listed - but it does not prompt. I have a document with 2 inserted and linked pictures in it. One is in the header defintiion in the header Gallery. The other is where the header has been applied in the document. The Links dialog correctly lists this as two links. When I run the macro in debug mode I see it loops 6 times on the "For each oField in oRange.Fields", but I never see any of the prompts? Any clues? Thanks again for the guidance. Robin "macropod" wrote: > > If I try to edit the link to point to a different image file (in the Links dialog) then Word crashes (Office 2007). > OK, Is your Word installation fully updated (SP2+)? Have you tried repairing it (Word Options|Resources|Detect & Repair)? > > Beyond that, try the following code, which is based on the link I posted previously, plus the alterations I suggested in my previous > posts: > > Option Explicit > ' Word macro to automatically update IncludePicture field links. > ' Created by macropod. > Dim TrkStatus As Boolean ' Track Changes flag > Dim Pwd As String ' String variable to hold passwords for protected documents > Dim pState As Boolean ' Document protection state flag > > Sub ChangePicLinks() > ' This routine runs whenever the document is opened. > ' It calls on the others to do the real work. > ' Prepare the environment. > With ActiveDocument > ' Insert your document's password between the double quotes on the next line > Pwd = "" > ' Initialise the protection state > pState = False > ' If the document is protected, unprotect it > If .ProtectionType <> wdNoProtection Then > ' Update the protection state > pState = True > ' Unprotect the document > .Unprotect Pwd > End If > Call MacroEntry > ' Most of the work is done by this routine. > Call UpdateIncludePictureFields > ' Go to the start of the document > Selection.HomeKey Unit:=wdStory > ' Clean up and exit. > Call MacroExit > ' If the document was protected, reprotect it, preserving any formfield contents > If pState = True Then .Protect wdAllowOnlyFormFields, Noreset:=True, Password:=Pwd > End With > 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 UpdateIncludePictureFields() > ' This routine sets the new path for external links, pointing them to the current folder. > Dim oRange As Range > Dim oField As Field > Dim OldPath As String > Dim NewPath As String > Dim OldFile As String > Dim NewFile As String > ' 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 image files. > If .Type = wdFieldIncludePicture Then > ' Get the old path > OldPath = .LinkFormat.SourcePath > ' Get the old filename > OldFile = .LinkFormat.SourceName > ' Get the new path. > GetPath: > NewPath = InputBox("The document contains a link to an image named:" _ > & vbCr & OldFile & vbCr & "in the folder below." & vbCr & _ > "What is the new Path?", "Change File Path", OldPath) > If NewPath = "" Or InStr(NewPath, ":") = 0 Then GoTo GetPath > OldPath = Replace(.LinkFormat.SourcePath, "\", "\\") > ' Get the new filename > GetName: > NewFile = InputBox("What is the new Filename?", "Change Filename", OldFile) > If NewFile = "" Or InStr(NewFile, ".") = 0 Then GoTo GetName > ' Replace the link to the external file > .Code.Text = Replace(.Code.Text, OldPath & "\\" & OldFile, NewPath & "\\" & NewFile) > .Update > End If > End With > Next oField > Next oRange > End Sub > > Place the code in your document's template (or Normal.dot/dotm), then activate the document to be updated and run the macro > 'ChangePicLinks'. > > -- > Cheers > macropod > [Microsoft MVP - Word] > > > "Robin" <Robin(a)discussions.microsoft.com> wrote in message news:E986F956-F58D-4149-81FF-366CB02C37C3(a)microsoft.com... > > OK, I can try and explain the problem like this... > > > > A company has a set of 50 document templates. In each of these templates > > there are various images (pictures), for example a product logo, company logo > > etc. There may be as many as 10 of these images in each template, and nearly > > all are common to all templates. To make things easier we inserted these > > images as linked and embedded objects with the intention that we could just > > update the source image file (being linked to) and the new image would appear > > in the template(s). This is a classic situation where a company chnages its > > logo every few years. In theory this should work, but there are problems. > > > > The problem has arisen that some of the images have been used in Headers and > > Footers, and these Heasders and Footers have been included in the template's > > Building Blocks (and Quick Lists). We did this because some headers we need > > to replace on the fly, for example using a macro can change a Confidential > > Document header to an Internal Document header and thereby void having even > > more temples to cover each of these nuances. Now when we change the source > > file there are problems. Firstly the Building Block does not update with the > > new image, even though the Links dialog in the template shows there is a link > > to the image file. If I try to edit the link to point to a different image > > file (in the Links dialog) then Word crashes (Office 2007). > > > > As a last resort I want to try and edit the image file paths and file names > > programatically - that means using different image files, but maybe it will > > work. So that is why I want to access the path and file names and replace > > them. Any suggestions would be welcome. > > > > thanks > > Robin > > . >
From: macropod on 24 Dec 2009 03:35 Hi Robin, Are the pictures formatted as in-line or some other layout (eg square)? -- Cheers macropod [Microsoft MVP - Word] "Robin" <Robin(a)discussions.microsoft.com> wrote in message news:651D76E3-08CF-4C1A-86A0-0C511686DF62(a)microsoft.com... > Hi Macropod, > > I have checked and diagnosed my Word 2007 - no problems and I'm using the > latest SP2. > > I have tried the macro you listed - but it does not prompt. I have a > document with 2 inserted and linked pictures in it. One is in the header > defintiion in the header Gallery. The other is where the header has been > applied in the document. The Links dialog correctly lists this as two links. > > When I run the macro in debug mode I see it loops 6 times on the "For each > oField in oRange.Fields", but I never see any of the prompts? Any clues? > > Thanks again for the guidance. > Robin > > "macropod" wrote: > >> > If I try to edit the link to point to a different image file (in the Links dialog) then Word crashes (Office 2007). >> OK, Is your Word installation fully updated (SP2+)? Have you tried repairing it (Word Options|Resources|Detect & Repair)? >> >> Beyond that, try the following code, which is based on the link I posted previously, plus the alterations I suggested in my >> previous >> posts: >> >> Option Explicit >> ' Word macro to automatically update IncludePicture field links. >> ' Created by macropod. >> Dim TrkStatus As Boolean ' Track Changes flag >> Dim Pwd As String ' String variable to hold passwords for protected documents >> Dim pState As Boolean ' Document protection state flag >> >> Sub ChangePicLinks() >> ' This routine runs whenever the document is opened. >> ' It calls on the others to do the real work. >> ' Prepare the environment. >> With ActiveDocument >> ' Insert your document's password between the double quotes on the next line >> Pwd = "" >> ' Initialise the protection state >> pState = False >> ' If the document is protected, unprotect it >> If .ProtectionType <> wdNoProtection Then >> ' Update the protection state >> pState = True >> ' Unprotect the document >> .Unprotect Pwd >> End If >> Call MacroEntry >> ' Most of the work is done by this routine. >> Call UpdateIncludePictureFields >> ' Go to the start of the document >> Selection.HomeKey Unit:=wdStory >> ' Clean up and exit. >> Call MacroExit >> ' If the document was protected, reprotect it, preserving any formfield contents >> If pState = True Then .Protect wdAllowOnlyFormFields, Noreset:=True, Password:=Pwd >> End With >> 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 UpdateIncludePictureFields() >> ' This routine sets the new path for external links, pointing them to the current folder. >> Dim oRange As Range >> Dim oField As Field >> Dim OldPath As String >> Dim NewPath As String >> Dim OldFile As String >> Dim NewFile As String >> ' 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 image files. >> If .Type = wdFieldIncludePicture Then >> ' Get the old path >> OldPath = .LinkFormat.SourcePath >> ' Get the old filename >> OldFile = .LinkFormat.SourceName >> ' Get the new path. >> GetPath: >> NewPath = InputBox("The document contains a link to an image named:" _ >> & vbCr & OldFile & vbCr & "in the folder below." & vbCr & _ >> "What is the new Path?", "Change File Path", OldPath) >> If NewPath = "" Or InStr(NewPath, ":") = 0 Then GoTo GetPath >> OldPath = Replace(.LinkFormat.SourcePath, "\", "\\") >> ' Get the new filename >> GetName: >> NewFile = InputBox("What is the new Filename?", "Change Filename", OldFile) >> If NewFile = "" Or InStr(NewFile, ".") = 0 Then GoTo GetName >> ' Replace the link to the external file >> .Code.Text = Replace(.Code.Text, OldPath & "\\" & OldFile, NewPath & "\\" & NewFile) >> .Update >> End If >> End With >> Next oField >> Next oRange >> End Sub >> >> Place the code in your document's template (or Normal.dot/dotm), then activate the document to be updated and run the macro >> 'ChangePicLinks'. >> >> -- >> Cheers >> macropod >> [Microsoft MVP - Word] >> >> >> "Robin" <Robin(a)discussions.microsoft.com> wrote in message news:E986F956-F58D-4149-81FF-366CB02C37C3(a)microsoft.com... >> > OK, I can try and explain the problem like this... >> > >> > A company has a set of 50 document templates. In each of these templates >> > there are various images (pictures), for example a product logo, company logo >> > etc. There may be as many as 10 of these images in each template, and nearly >> > all are common to all templates. To make things easier we inserted these >> > images as linked and embedded objects with the intention that we could just >> > update the source image file (being linked to) and the new image would appear >> > in the template(s). This is a classic situation where a company chnages its >> > logo every few years. In theory this should work, but there are problems. >> > >> > The problem has arisen that some of the images have been used in Headers and >> > Footers, and these Heasders and Footers have been included in the template's >> > Building Blocks (and Quick Lists). We did this because some headers we need >> > to replace on the fly, for example using a macro can change a Confidential >> > Document header to an Internal Document header and thereby void having even >> > more temples to cover each of these nuances. Now when we change the source >> > file there are problems. Firstly the Building Block does not update with the >> > new image, even though the Links dialog in the template shows there is a link >> > to the image file. If I try to edit the link to point to a different image >> > file (in the Links dialog) then Word crashes (Office 2007). >> > >> > As a last resort I want to try and edit the image file paths and file names >> > programatically - that means using different image files, but maybe it will >> > work. So that is why I want to access the path and file names and replace >> > them. Any suggestions would be welcome. >> > >> > thanks >> > Robin >> >> . >>
First
|
Prev
|
Next
|
Last
Pages: 1 2 3 Prev: Template lookup to SQL Server DB value Next: ActiveDocument.SaveAs with EFS |