![]() |
|
|
|
#1
|
|||
|
|||
|
I have multiple RTF documents (signatures) with an address line that needs to be updated. Is there a way to search and replace over multiple documents?
|
|
#2
|
|||
|
|||
|
Hello.
Please follow the directions below to replace text in multiple documents. This is the only solution to replacing text in multiple documents for Microsoft Word. There are several options if you are using another program such as Notepad, etc... 1. Move your mouse cursor to the beginning of the text you wish to copy. Hold the left mouse button and drag the cursor over the text. The text you wish to copy should now be highlighted. 2. Click the right mouse button on the text you wish to copy and select the "Copy" option from the drop-down menu. 3. Select the "-" button in the top right corner of your document to minimize the document in your program. Open the document with the text that you wish to replace by selecting the "File" option in the menu bar and choosing the "Open" option. 4. Move your mouse cursor to the beginning of the text you wish to replace. Hold the left mouse button and drag the cursor over the text. The text you wish to replace should now be highlighted. 5. Click the right mouse button on the text you wish to replace and select the "Paste" option from the drop-down menu. The text you have copied will replace the text you have selected. 6. Repeat steps 3 through 5 if you wish to copy the text to another document. |
|
#3
|
||||
|
||||
|
Quote:
Roscoe: Try a macro like: Code:
Sub Update_RTF_File_Sigs()
Application.ScreenUpdating = False
Dim strFolder As String, strFile As String, RTFDoc
strFolder = GetFolder
If strFolder = "" Then Exit Sub
strFile = Dir(strFolder & "\*.rtf", vbNormal)
While strFile <> ""
Set RTFDoc = Documents.Open(FileName:=strFolder & "\" & strFile, AddToRecentFiles:=False, Visible:=False)
With RTFDoc.Range.Find
.ClearFormatting
.Text = "Old Address"
.Replacement.Text = "New Address"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
RTFDoc.Close SaveChanges:=True
strFile = Dir()
Wend
Set RTFDoc = 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
Of course, you'll need to change the 'Old Address' & 'New Address' details to suit your requirements. In this regard, if an address is in the form of: Address Line 1¶ Address Line 2 the .Text and/or .Replacement.Text expressions (as required), would become: = "Address Line 1^pAddress Line2" In case you need advide on how to install & run a macro, see: http://www.gmayor.com/installing_macro.htm
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] Last edited by macropod; 01-28-2011 at 02:17 AM. Reason: Deleted unnecessary message box (left over from testing) |
|
#4
|
|||
|
|||
|
Hi,
Thank you so much macropod ! This script is exactly what I am looking for. Would it be possible to also check in all sub-directories of the selected folders ? That would be amazing. Thank you ! ~Pat |
|
#5
|
|||
|
|||
|
Funny. I trying to make a change in over a hundred documents. I was hoping for a "replace all" that could do that.
|
|
#6
|
||||
|
||||
|
For the kind of code modifications needed to process sub-folders, see: https://www.msofficeforums.com/word-...html#post47785
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
#7
|
|||
|
|||
|
Unfortunately none of the above solutions finds/replaces text in headers/footers in word-documents. It only affects bodytext.
Any solutions to include headers & footers in find/replace function? |
|
#8
|
||||
|
||||
|
There are numerous threads in this forum in which the code to process headers, footers, etc. is discussed - and provided.
Code that finds & replaces a specified string anywhere in all documents in a selected folder and its sub-folders might look like: Code:
Option Explicit
Dim FSO As Object, oFolder As Object, StrFolds As String
Sub Main()
Application.ScreenUpdating = False
Dim TopLevelFolder As String, TheFolders As Variant, aFolder As Variant, i As Long
TopLevelFolder = GetFolder
StrFolds = vbCr & TopLevelFolder
If FSO Is Nothing Then
Set FSO = CreateObject("Scripting.FileSystemObject")
End If
'Get the sub-folder structure
Set TheFolders = FSO.GetFolder(TopLevelFolder).SubFolders
For Each aFolder In TheFolders
RecurseWriteFolderName (aFolder)
Next
'Process the documents in each folder
For i = 1 To UBound(Split(StrFolds, vbCr))
Call UpdateDocuments(CStr(Split(StrFolds, vbCr)(i)))
Next
Application.ScreenUpdating = True
End Sub
Sub RecurseWriteFolderName(aFolder)
Dim SubFolders As Variant, SubFolder As Variant
Set SubFolders = FSO.GetFolder(aFolder).SubFolders
StrFolds = StrFolds & vbCr & CStr(aFolder)
On Error Resume Next
For Each SubFolder In SubFolders
RecurseWriteFolderName (SubFolder)
Next
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
Sub UpdateDocuments(oFolder As String)
Dim strFldr As String, strFile As String, wdDoc As Document
Dim Rng As Range, Sctn As Section, HdFt As HeaderFooter, Shp As Shape
strFldr = oFolder
If strFldr = "" Then Exit Sub
strFile = Dir(strFldr & "\*.doc", vbNormal)
While strFile <> ""
Set wdDoc = Documents.Open(FileName:=strFldr & "\" & strFile, AddToRecentFiles:=False, ReadOnly:=False, Visible:=False)
With wdDoc
'Loop through all story ranges
For Each Rng In .StoryRanges
Call FndRepRng(Rng)
For Each Shp In Rng.ShapeRange
If Not Shp.TextFrame Is Nothing Then
Call FndRepRng(Shp.TextFrame.TextRange)
End If
Next
Next
'Loop through all headers & footers
For Each Sctn In .Sections
For Each HdFt In Sctn.Headers
With HdFt
If .Exists = True Then
If .LinkToPrevious = False Then
Call FndRepRng(HdFt.Range)
For Each Shp In .Shapes
If Not Shp.TextFrame Is Nothing Then
Call FndRepRng(Shp.TextFrame.TextRange)
End If
Next
End If
End If
End With
Next
For Each HdFt In Sctn.Footers
With HdFt
If .Exists = True Then
If .LinkToPrevious = False Then
Call FndRepRng(HdFt.Range)
For Each Shp In .Shapes
If Not Shp.TextFrame Is Nothing Then
Call FndRepRng(Shp.TextFrame.TextRange)
End If
Next
End If
End If
End With
Next
Next
'Save and close the document
.Close SaveChanges:=wdSaveChanges
End With
strFile = Dir()
Wend
Set wdDoc = Nothing
End Sub
Sub FndRepRng(Rng As Range)
With Rng.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "Find string"
.Replacement.Text = "Replace string"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
|
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Replace All with plain text containing subscript | DeaducK | Word | 0 | 06-24-2010 08:16 PM |
| Replace formatting with text | eyehefbee | Word | 2 | 11-09-2009 02:41 AM |
Generating multiple documents from 1 data source
|
themangoagent | Word | 2 | 08-14-2009 12:12 PM |
| 2007 merging multiple documents into one master | hugheso | Word | 0 | 04-02-2009 04:31 AM |
page numbering across multiple documents
|
reitdesign | Word | 3 | 12-12-2008 11:55 AM |