vbams-wordfind

Find either of two text strings


I search a Word document for a specific word occurring at the beginning of a paragraph. It works.

I'd like to search for two words at the same time.

Where:

Word1 or Word2 is found at the start of a paragraph

and

Word1 or Word2 starts consecutive paragraphs

If I run the sub twice, once for Word1 then once for Word2, it won't find instances where Word1 starts a paragraph and Word2 starts the next consecutive one.

I'd like to implement this logic:

(search_text = Chr(13) & "Word1") OR (search_text = Chr(13) & "Word2")

Sub Para_start()
search_text = Chr(13) & "Word1"
With W_rg.Find
    While .Execute
        If W_rg.Find.Found Then
            Msgbox "Found" & Word1
            'Do more stuff, for example
            'Insert a comment where Word1 or Word2 is found
            'Insert another comment if EITHER Word1 or Word 2 are found in consecutive paragraphs  
        End If
    Wend
End With
End Sub

Solution

  • No, it isn't that simple. Find works the same in VBA as it does in the UI - there is no option for using OR. However, finding Chr(13) & "Word1" and then checking the following paragraph to see if it starts with Word2 is simple, for example:

    Sub Para_start()
        Dim search_text1 As String: search_text1 = Chr(13) & "Word1"
        Dim search_text2 As String: search_text2 = "Word2"
        Dim findRange As Range: Set findRange = ActiveDocument.Content
        
        With findRange
            With .Find
                .ClearFormatting
                .Text = search_text1
            End With
            Do While .Find.Execute
                If findRange.Paragraphs(1).Next.Range.Words(1).Text = search_text2 Then
                    'Insert a comment where both Word1 and Word 2 are found in consecutive paragraphs
                Else
                    'Insert a comment where Word1 is found
                End If
                .Collapse wdCollapseEnd
            Loop
        End With
    End Sub