#1
|
|||
|
|||
Update Multiple Documents Footer
I have written a Macro to update text in multiple DOCX files, however it will not update the Footer. I have templates to evaluations, and I need to make a Rev change to all of them at once. Can anyone update the following Macro to Search and replace text in the Footer?:
Sub Update_DOCX_File_Sigs() Application.ScreenUpdating = False Dim strFolder As String, strFile As String, DOCXDoc strFolder = GetFolder If strFolder = "" Then Exit Sub strFile = Dir(strFolder & "\*.DOCX", vbNormal) While strFile <> "" Set DOCXDoc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False) With DOCXDoc.Range.Find .ClearFormatting .Text = "72-0006-3500/8" .Replacement.Text = "72-0006-3500/9" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = True .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False .Execute Replace:=wdReplaceAll End With DOCXDoc.Close SaveChanges:=True strFile = Dir() Wend Set DOCXDoc = Nothing Application.ScreenUpdating = True End Sub Function GetFolder() As String Dim oFolder As Object GetFolder = "" Set oFolder = CreateObject("Shell.Application").BrowseForFolder( 0, "Choose a folder", 0) If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path Set oFolder = Nothing End Function |
#2
|
||||
|
||||
The reason it doesn't update the footer is that your macro doesn't address the footer. It addresses only the main storyrange i.e. DOCXDoc.Range. If you want to address all the ranges in a document, or specific ranges, you need to loop through all the storyranges or address the specific range. The following takes the former approach. You might also be interested in http://www.gmayor.com/document_batch_processes.htm which has built-in processes to handle this including the sub foilders of the selected folder if required.
Code:
Option Explicit Sub Update_DOCX_File_Sigs() Application.ScreenUpdating = False Dim strFolder As String, strFile As String, DOCXDoc Dim oStory As Range strFolder = GetFolder If strFolder = "" Then Exit Sub strFile = Dir(strFolder & "\*.DOCX", vbNormal) While strFile <> "" Set DOCXDoc = Documents.Open(Filename:=strFolder & "\" & strFile, _ AddToRecentFiles:=False, _ Visible:=False) For Each oStory In DOCXDoc.StoryRanges ReplaceInRange oStory If oStory.StoryType <> wdMainTextStory Then While Not (oStory.NextStoryRange Is Nothing) Set oStory = oStory.NextStoryRange ReplaceInRange oStory Wend End If Next oStory DOCXDoc.Close SaveChanges:=True strFile = Dir() Wend Set oStory = Nothing Set DOCXDoc = Nothing Application.ScreenUpdating = True End Sub Private Sub ReplaceInRange(oRng As Range) With oRng.Find .ClearFormatting .Text = "72-0006-3500/8" .Replacement.Text = "72-0006-3500/9" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = True .MatchWholeWord = True .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False .Execute Replace:=wdReplaceAll End With End Sub Private Function GetFolder() As String Dim oFolder As Object GetFolder = "" Set oFolder = CreateObject("Shell.Application").BrowseForFolder(0, "Choose a folder", 0) If (Not oFolder Is Nothing) Then GetFolder = oFolder.Items.Item.Path Set oFolder = Nothing End Function
__________________
Graham Mayor - MS MVP (Word) (2002-2019) Visit my web site for more programming tips and ready made processes www.gmayor.com |
#3
|
|||
|
|||
Worked Perfectly, thanks a heap
|
Tags |
footer, update templates |
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Replace footer image in multiple Word documents | heyjim | Drawing and Graphics | 1 | 08-07-2015 05:23 PM |
help needed for automatic update of footer | sanju71821 | Word | 7 | 07-01-2015 08:18 AM |
update template in all documents | vangxbg | Word VBA | 1 | 02-25-2013 04:04 AM |
Auto update footer in Word 2007 | worduser1970 | Word | 4 | 11-27-2012 08:02 AM |
header/footer problems only in certain documents | Endzone | Word | 5 | 08-15-2012 01:04 AM |