Route пишет:Примерчик бы живой такой с пару параметров хотя бы
Вот с примерчиками как раз и главный вопрос. Прежде, чем писать макрос, решите для себя, реализуема ли ваша задача.
Если исходные файлы вы составляете сами, тогда вопросов нет: вы сможете все заменяемые контексты определить как теги (напр., <свойство:значение>), либо представить их в том же ini-формате, а можете и разместить в другом файле Word в нужных полях или закладках. Тогда вопрос "на что заменять" будет решаться просто - вы поочередно отыскиваете все такие контексты в файле замен, определяя имена свойств и заменяющие значения.
Если же исходные файлы вам откуда-то передают в виде плоского текста, то формализация такого текста остается под вопросом. Вот типичные трудности:
- если в файле замен по факту две даты, то какая из них должна пойти в целевой документ?
- как отличить в файле замен название организации от фамилии сотрудника?
- как исключить ложные срабатывания по такому-то правилу?
- что должен делать макрос, если ожидаемый контекст не обнаружен в файле замен?
Если у вас есть четкий алгоритм нахождения каждой замены в файле замен, то можно браться за работу.
Примеров на VBA по анализу текста на соответствие регулярному выражению много в Интернете, изучите их. Помимо проверки того, соответствует ли строка регулярному выражению, ваш макрос должен уметь вытаскивать из найденной строки целевое значение (подконтекст или submatch). Например, если в исходном тексте имеется контекст вида:
... начало работ по реализации проекта намечено на 12.06.2019 с продолжением ...
то для выделения из него даты можно использовать регулярное выражение типа:
(проект)(.{1,20})(\s)(\d{1,2}\.\d{2}\.\d{2,4})
если поиск успешен, то четвертый submatch и будет содержать дату. Поскольку для выражения одного типа это может быть 1-й submatch, а для другого типа - 4-й, то номер этого подконтекста также должен входить в параметр поиска, то есть их может стать три:
[Updates]
1=|описательтекста|номерподконтекста|имясвойства|
Сам же состав алгоритма по замене всех контекстов мне видится неизменным:
1. Макрос сканирует файл параметров и для каждого параметра определяет название свойства. Далее макрос находит в файле замен нужный контекст и, если он найден, то вытаскивает из контекста нужный submatch, а затем в целевом файле обновляет соответствующее пользовательское свойство найденным значением подконтекста.
2. По окончании сканирования параметров сам макрос обновляет все поля в целевом документе. Соответственно, все поля вида {DOCPROPERTY "свойствоN"} станут отображать заимствованные из файла замен значения. Эти поля в целевом файле пользователь расставляет самостоятельно.