macro for performing more than one find and replace procedure at the same time

Anonymous
2010-08-07T18:21:24+00:00

ok, i've got to about 700!! find and replace procedures for a document of TWO MILLION words so this macro could save me about 4 hours of work.

i tried to rewrite this macro so that it would work but it didn't.  can anyone help me out

Sub Macro1()

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = " mit der "
.Replacement.Text = " mitder"
.Text = " mit dem "
.Replacement.Text = " mitdem"
.Text = " mit den "
.Replacement.Text = " mitden"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Microsoft 365 and Office | Word | For home | Windows

Locked Question. This question was migrated from the Microsoft Support Community. You can vote on whether it's helpful, but you can't add comments or replies or follow the question.

0 comments No comments
Answer accepted by question author
Anonymous
2010-08-07T18:56:51+00:00

ok, i got it work, i just copied it over

Sub Macro1()

'

' Macro1 Macro

' Macro recorded 8/7/10 by Seely Foley

'

    Selection.Find.ClearFormatting

    Selection.Find.Replacement.ClearFormatting

    With Selection.Find

        .Text = " mit der "

        .Replacement.Text = " mitder"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    Selection.Find.ClearFormatting

    Selection.Find.Replacement.ClearFormatting

    With Selection.Find

        .Text = " mit den "

        .Replacement.Text = " mitden"

        .Forward = True

        .Wrap = wdFindContinue

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = False

        .MatchSoundsLike = False

        .MatchAllWordForms = False

    End With

    Selection.Find.Execute Replace:=wdReplaceAll

End Sub

Was this answer helpful?

30+ people found this answer helpful.
0 comments No comments

53 additional answers

Sort by: Newest
  1. Anonymous
    2015-09-02T00:18:01+00:00

    Thanks again for your help with the find-and-comment-from-list macro, Greg. Deleting that line fixed the character limit issue.

    I've been trying to shift from a Word-based database to an Excel-based one. I added the Excel object library to my references, but I can't seem to figure out the analogous Excel objects to "translate" the macro (e.g. "Sheets" vs. "Table," etc.). I'm new to VBA so my method is just trial-and-error (and so far no trial-and-success). Any suggestions?

    Was this answer helpful?

    0 comments No comments
  2. Anonymous
    2015-08-19T21:12:15+00:00

    Delete that entire line.

    Was this answer helpful?

    0 comments No comments
  3. Anonymous
    2015-08-19T19:50:07+00:00

    Thanks for the find-and-comment macro, Greg!

    It seems to be working very well, except for one issue: when it reaches a comment over 255 characters, I get a runtime error 5854 (string too long). The debugger highlights this line:

    .Replacement.Text = oRngComment.Text

    Is there a line I can add that removes the character limit, or sets it to a very high number?

    Was this answer helpful?

    0 comments No comments
  4. Anonymous
    2015-08-19T02:01:17+00:00

    The macro evolving here makes several assumptions.  That is ok, so does my alteration to find and comment later in this thread.  Still I thought I would mention them just to save others from possibly scratching their heads in frustration later on.

    First it assumes, probably correctly, that the user wants to search the main text area of the document and fails to indicate or warn the user that the search and replace will affect only the main text area.  The point is that a simple VBA find and replace like this one only looks in the main text storyrange.

    It assumes that the file path list and it assumes that the file at that path has a table with at least two columns.  If any of those assumptions are wrong the code will puke.

    What follows is still a relatively basic VBA find and replace procedure but it does address the issue identified above.

    Sub ReplaceFromTableList()

    Dim oListDoc As Document, oDoc As Document

    Dim strFile_Path As String

    Dim lngType As Long

    Dim oTbl As Table

    Dim oRng As Range

    Dim strFind As String, strReplace As String

      'What to search

      Set oDoc = ActiveDocument

      'Where to search

      lngType = Selection.Range.StoryType

      'What to search for and replace with.  Change path below reflect

      "the name and path of the table document

      strFile_Path = "D:\List.docm"

      'Handle possible errors.

      On Error GoTo Err_Handler

      'Open list file.

      Set oListDoc = Documents.Open(FileName:=strFile_Path, Visible:=False)

      Set oTbl = oListDoc.Tables(1)

      For lngIndex = 1 To oTbl.Rows.Count

        'Set the search range. A simple VBA F&R does not search all storyranges.

        Set oRng = oDoc.StoryRanges(lngType)

        strFind = oTbl.Cell(lngIndex, 1).Range.Text

        strFind = Left(strFind, Len(strFind) - 2)

        strReplace = oTbl.Cell(lngIndex, 2).Range.Text

        strReplace = Left(strReplace, Len(strReplace) - 2)

        With oRng.Find

          .ClearFormatting

          .Replacement.ClearFormatting

          .MatchWildcards = False

          .MatchWholeWord = True

          .Text = strFind

          .Replacement.Text = strReplace

          .Forward = True

          .Wrap = wdFindContinue

          .Execute Replace:=wdReplaceAll

        End With

      Next lngIndex

      oListDoc.Close wdDoNotSaveChanges

    lbl_Exit:

      Exit Sub

    Err_Handler:

      Select Case Err.Number

        Case 5941:  MsgBox "The source table is missing or missing a required column."

        Case Else:  MsgBox Err.Description

      End Select

      Resume lbl_Exit

    End Sub

    Was this answer helpful?

    0 comments No comments