У меня есть куча документов с разнородными стилями, которые я добавляю в длинный макрос, который находит и заменяет эти стили на правильные. Прямо сейчас я просто добавляю в список, поскольку нахожу неправильный стиль. Например, может быть заголовок 1, заголовок 1, H1 или h1. Я хочу написать функцию поиска и замены для каждого из них на данный момент. Что было бы круче, так это если бы я мог написать макрос catch all для такого рода вещей, используя Regex: (h | H). {6} \ s1 (не лучший писатель Regex, так что терпите). В идеале это могло бы охватить все варианты заголовка 1 (хотя это не охватило бы случаи h1, H1, хотя я мог бы добавить это достаточно легко.
Я знаю, что VBA поддерживает Regex. Я добавил ссылку на Я также знаю, как это будет работать для замены указанного c текста. Я не заменяю текст, хотя. ТОЛЬКО форматирование. Я не слишком много с этим играюсь. Я просто хочу знать, могу ли я использовать Regex при работе конкретно со стилем. Вот как выглядят функции прямо сейчас:
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Heading 1")
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles("SSC TOC 2")
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Я просто записал это. Теперь, смогу ли я поставить Regex вместо этой строки, вот так:
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles(someRegex function (h|H).{6}\s1)
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles("SSC TOC 2")
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
В основном просто с помощью функции функция someRegex (h | H). {6} \ s1 вместо строкового литерала. Есть ли способ сделать это? Буду признателен за любые рекомендации или помогите!