У меня сейчас такая задача: Регулярным выражением превратить фразу:
"Инструкция: Настоящим актом, Заказчик, подтверждает свое согласие с тем что документы предварительно им изучены;Согласовано"
в
"Инструкция: Согласовано"
То что нужно удалить все время разное, приходится копать в сторону регулярок.
Вот пока до чего дошел - не работает.
Макрос
Sub Макрос2()
Dim strOriginal As String 'Оригинальная строка
Dim strResult As String 'Результат после замены
Dim strPattern As String 'Регулярное выражение
Dim strReplace As String 'На что меняем
strOriginal = "Инструкция: Настоящим актом, Заказчик, подтверждает свое согласие с тем что документы предварительно им изучены;Согласовано"
strPattern = "[^;]+"
strReplace = ""
strResult = Replace(strOriginal, strPattern, strReplace)
MsgBox strResult
End Sub
В вашем коде Replace - это функция библиотеки VBA, т.е. это VBA.Replace.
У этой функции нет возможности работать с регулярными выражениями. Вот справка по этой функции: https://learn.microsoft.com/ru-ru/office/vba/language/reference/user-interface-help/replace-function
Вам нужно использовать библиотеку: Microsoft VBScript Regular Expressions 5.5
Эта библиотека не будет работать на Mac OS, т.к. этой библиотеки нет на этой операционной системе.
Или можно использовать объект Word.Find. В самом Ворде это окно "Найти и заменить". В этом объекте есть возможность использовать регулярные выражения.
Я подключил Microsoft VBScript Regular Expressions 5.5
Не подскажете как сделать замену регуляркой?
Опишите словами, что нужно найти и на что заменить? Опишите словами, что делает это выражение: "[^;]+"
Ну я посчитал, что находит во фразе все, что до ";"
И еще вопрос: пытаюсь выполнить макросы с регулярками, которые нашел в интернете, но они все выдают ошибку: compile error
sub or function not defined
Регулярным выражением мне нужно превратить фразу:
"Инструкция: Настоящим актом, Заказчик, подтверждает свое согласие с тем что документы предварительно им изучены;Согласовано"
в
"Инструкция: Согласовано"
Эта часть меняется:? Инструкция: Настоящим актом, Заказчик, подтверждает свое согласие с тем что документы предварительно им изучены
Эта часть постоянная:? ;Согласовано
Настоящим актом, Заказчик, подтверждает свое согласие с тем что документы предварительно им изучены
Эта часть все время разная. Все остальное постоянно
Нужно найти выражение:? Инструкция:Изменяющаяся_часть;Согласовано
И сделать:? Инструкция: Согласовано
да, именно
Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.
Может быть нет необходимости использовать объект RegExp, а достаточно использовать Word.Find.
Этот макрос делает замену в основной части документа (не в колонтитулах и других местах), во всё тексте.
Макрос
Sub Макрос()
With ActiveDocument.Range.Find
.Text = "(Инструкция:)(*;)(Согласовано)"
.Replacement.Text = "\1 \3"
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Но нужно учитывать, что если есть другие выражения, в которых есть фраза "Инструкция:", но нет "Согласовано", то будет сделана замена не там, где надо. Например, в документе десять абзацев. Первый абзац начинается "Инструкция:", но дальше в этом абзаце нет "Согласовано". А согласовано есть в десятом абзаце. То будет удалён весь текст в документе от "Инстрация:" до "Согласовано".
Тогда нужно делать замену не сразу по всему документу, а нужно двигаться по каждому абзацу и уже в каждом абзаце делать замену. Или придумать другое выражение, я пока не знаю, какое.
Огромное спасибо за помощь. Почту я утратил
Я добавил пояснения в сообщение #10.
Я понял, спасибо. Пытаюсь вывести результат на экран: MsgBox Text но выводит исходную фразу
Не смогу помочь, спросите на другом форуме.