We produce etext files for blind/low vision folk, and the convention is to replace all caps words with lower case and a bold character style. Some words have to be in title case where they start a sentence (or are names). This can be tedious to do manually for young adult novels that are full of "shouting" text.

I have a macro which performs a series of Find and Replaces to change upper case text into lower case, with a bolding character style applied to it, a style called "Emphasis".

The last action of the macro is to find sentences whose first word now starts with a lower case letter, and turn it into an upper case letter.

I've got some code to do this:

        For i = 1 To docFind.Sentences.count
            If docFind.Sentences(i).Characters.First.Bold = True Then
                docFind.Sentences(i).Characters(1).Case = wdUpperCase
                docFind.Sentences(i).Characters(1).HighlightColorIndex = wdPink
            End If
        Next i
Two issues with this way of doing things:

1. For a long document, it's extremely slow. The full code loops through all sentences, more than once.
2. It's even slower when additional lines of code deal with the cases where the sentence starts with a quotation mark, and the second character is lower case.

So the question is:

Rather than loop through potentially thousands of sentences, how to write code to restrict the search to sentences whose first word is in Emphasis style (or in bold), and whose first letter is lower case?