В Word, как я могу изменить данные слияния почты программно с VBA? - PullRequest
1 голос
/ 18 сентября 2009

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

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

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

Ответы [ 2 ]

0 голосов
/ 21 апреля 2015

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

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

0 голосов
/ 18 сентября 2009

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

Data Source -> Mail Merge Template

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

Data Source -> Microsoft Query -> Mail Merge Template

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

...