В Word, как я могу изменить данные слияния почты программно с VBA?

StackOverflow https://stackoverflow.com/questions/1441071

Вопрос

У меня есть документ Word, который используется в качестве исходного документа для слияния. Я могу редактировать документ, но не данные, используемые для слияния. Мне нужно преобразовать некоторые данные в источнике данных (в частности, мне нужно взять числа (например, 342) и добавить их значение в словах (например, «триста сорок два (342)»)). Я могу написать функцию VBA для выполнения преобразования, но я не уверен, как лучше всего получить данные для этой функции.

Есть ли способ связать макрос с конкретными точками в документе и позволить объединению управлять процессом преобразования? (Я думаю о том, как вы можете использовать формулы в полях Word; у меня есть несколько вещей вида {IF {MERGEFIELD foo} > 75 {MERGEFIELD foo} {= {MERGEFIELD foo} * 20 }} в документе уже. Если бы я мог что-то добавить, я мог бы перейти {FUNCTION WordNum {MERGEFIELD number}} , это было бы идеально.)

С другой стороны, я думаю, что могу использовать VBA для поиска в источнике данных слияния (в частности, document.MailMerge.DataSource ) и переписать поля. Если я пойду по этому пути, где я должен выполнить макрос, чтобы он попадал в данные после того, как они были прочитаны из источника данных, но до того, как они были объединены с документом?

Это было полезно?

Решение 2

Кажется, что нет способа вызова произвольных функций из встроенных макросов Word, поэтому я пошел по пути VBA.

Я добавил макрос AutoOpen в исходный документ с именем MailMerge.EditDataSource , а затем прошел по таблице, чтобы внести в нее изменения.

Другие советы

Не могли бы вы выполнить преобразование данных в Microsoft Query? То есть где у вас сейчас есть:

Data Source -> Mail Merge Template

создайте Microsoft Query, который находится между вашим источником данных и Word:

Data Source -> Microsoft Query -> Mail Merge Template

Прошло много времени с тех пор, как я использовал Mail Merge в Word, но я не помню, чтобы я мог контролировать его ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top