#replace #ms-word
Вопрос:
Я пытался создать некоторый код для поиска текста, в котором одно слово в тексте имеет определенный формат или стиль. Например, я хотел бы выполнить поиск текста «Привет, мир, все хорошо», но только в тех случаях, когда слово «все» выделено жирным шрифтом.
Я подумал о поиске первых нескольких слов «Привет, мир «; сворачивании выделения, поиске следующих трех символов вперед для слова «все» полужирным шрифтом; сворачивании выделения (если верно), а затем поиске следующего бита для слов «хорошо». Это привело бы к тому, что вся фраза была бы выделена жирным шрифтом, но это кажется действительно неэффективным и не очень гибким. Кроме того, чтобы затем выбрать все предложение целиком, мне нужно написать код, чтобы переместить выделение обратно в начало и расширить выделение вперед. Затем мне нужно сбросить поиск, чтобы продолжить движение вперед с этой позиции.
Есть ли какой-нибудь простой/простой/более элегантный способ поиска строки, в которой только одно слово в строке имеет определенные свойства, такие как жирный шрифт? Я специально хочу, чтобы поиск игнорировал те случаи фразы, в которых соответствующее слово не выделено жирным шрифтом.
Я потратил несколько часов на поиск в Google и stackflow и ничего не могу найти по этому поводу.
Я не публиковал код, потому что я не очень хорошо пишу код, и я действительно хочу понять, существует ли гибкий/элегантный способ делать то, что я хочу. Негибкий корень, который я объяснил выше, настолько негибок, что я не хочу утруждать себя кодированием чего-либо.
Спасибо, Джереми
Ответ №1:
Метод, который я бы использовал, заключается в поиске строки и, если она найдена, затем в строке найдите слово. Вот пример.
Sub Demo() Dim StringRange As Range Dim MatchFound As Boolean With ActiveDocument.Range.Find ' The string to find .Text = "Hello world, all is good" ' Search the document Do While .Execute ' Capture the string Set StringRange = .Parent.Duplicate With .Parent.Duplicate.Find ' The word to find .Text = "all" .Font.Bold = True ' Search the string If .Execute Then MatchFound = True StringRange.Select If MsgBox("Match found. Continue searching?", vbQuestion vbYesNo) = vbNo Then Exit Sub End If End If End With Loop If MatchFound Then MsgBox "Finished searching document", vbInformation Else MsgBox "No match found", vbInformation End If End With End Sub
Комментарии:
1. Вау. Огромное спасибо. Это именно то, что я хотел сделать. С вашей стороны невероятно великодушно написать такой код. Спасибо. Я удивлен, что этот вопрос не возникает более регулярно. Еще раз спасибо вам. Это абсолютно идеально.