No Word, como posso alterar dados de mala direta por meio de programação com VBA?
-
10-07-2019 - |
Pergunta
Eu tenho um documento do Word que é usado como o documento de origem para uma mala direta. Eu posso editar o documento, mas não os dados que estão sendo usados ??para a mesclagem. Eu preciso para transformar alguns dos dados na fonte de dados (especificamente, eu preciso tomar números (por exemplo, 342) e adicione seu valor em palavras (por exemplo, "342 (342)")). Eu posso escrever uma função VBA para fazer a transformação, mas eu não tenho certeza que a melhor forma de obter os dados para essa função.
Existe alguma maneira eu posso associar uma macro a pontos específicos no documento e deixe a fusão conduzir o processo de transformação? (Estou pensando em como você pode usar fórmulas em campos do Word, eu tenho algumas coisas da forma { IF { MERGEFIELD foo } > 75 { MERGEFIELD foo } { = { MERGEFIELD foo } * 20 } }
no já o documento Se eu pudesse acrescentar algo para que eu pudesse ir { FUNCTION WordNum { MERGEFIELD number } }
<. / strong>, que seria o ideal.)
Como alternativa, eu acho que eu posso usar o VBA para remexer em torno de fonte de dados da mala direta (especificamente document.MailMerge.DataSource
) e campos de reescrita. Se eu seguir esse caminho, onde eu deveria executar a macro para que ele irá obter os dados depois de ter sido lido a partir da fonte de dados, mas antes tem sido mesclado com o documento?
Solução 2
Não parece ser uma maneira de chamar funções arbitrárias de macros do Word incorporados, então eu fui a rota VBA.
Eu adicionei uma macro AutoOpen
ao documento de origem que chamou MailMerge.EditDataSource
e depois atravessou a mesa para fazer suas alterações.
Outras dicas
Você poderia fazer a transformação de dados em Microsoft Query? Isto é, onde você tem atualmente:
Data Source -> Mail Merge Template
criar um Microsoft Query que fica entre a sua fonte de dados e de palavra:
Data Source -> Microsoft Query -> Mail Merge Template
Tem sido um tempo desde que eu usei mala direta no Word, mas eu não me lembro de ser capaz de exercer muito controle sobre ele ...