Использование следующей строки не совсем лучший ответ. Приведенный ниже код помогает, если и только если вы хотите выполнять поиск по основному содержанию документа, а вашим однозначным числам предшествует пробел. Если у вас плохое положение, когда в качестве первого символа в абзаце используется одна цифра, этот код не решит эту проблему. Я оставлю это в качестве упражнения для читателя о том, как изменить (), чтобы включить такие вещи, как маркеры абзаца.
Приведенный ниже код был протестирован с
This 1 is 2 some 8 text 9. This is some7 more6 5 text
, который правильно преобразован в
This One is Two some Eight text Nine. This is some7 more6 Five text
Это код
Sub ReplaceSingleNumbersWithText()
' Set up a search term for a single digit where the single digit is preceded
' by a space and followed by a character that is not a number or a letter
Const DIGIT_SEARCH As String = "( )([XXX]{1})([!0-9a-zA-Z])"
Dim myDigitAsWord As Variant
Dim mySearchDoc As Word.Document
Dim myIndex As Long
Dim myFindText As String
Dim myReplaceText As String
myDigitAsWord = Split("Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine", ",")
For Each mySearchDoc In Word.Application.Documents
With mySearchDoc.StoryRanges(wdMainTextStory)
With .Find
.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
For myIndex = 0 To UBound(myDigitAsWord)
myFindText = Replace(DIGIT_SEARCH, "XXX", CStr(myIndex))
myReplaceText = "\1" & myDigitAsWord(myIndex) & "\3"
.Find.Execute FindText:=myFindText, replacewith:=myReplaceText, Replace:=wdReplaceAll
Next
End With
Next
End Sub