使用VBA更改Word MailMerge字段的值

时间:2013-04-05 00:42:08

标签: vba ms-word word-vba mailmerge

我有一个包含MailMerge字段的文档,但我不想使用整个datasource-> mailmerge的想法。相反,我在Autonew()上呈现UserForm并要求用户在字段中键入数据。

原因是因为这个文档要与一行数据“合并”,所以浪费时间要求用户为一行做整个数据源。

我有一个使用DocVariables的工作解决方案,我相信大多数人会说这是正确的方法,但是这个客户喜欢“看到”mailmerge变量的想法(例如<< 1>> ;)在源文档中。他们知道他们可以使用Alt-F9显示代码来查看DocVariables,但他们坚持要使用MergeFields。

使用DocVariables我使用以下方法。这样做,所以我知道我有正确的想法,我的其余代码工作正常。

ActiveDocument.Variables("varSurame").Value = .txtSurname

然而,我无法锻炼如何使用合并字段做同样的事情。我想做类似下面的事情(但没有设置“value”属性)。

ActiveDocument.MailMerge.Fields("Surname").value = .txtSurname

.text属性是readonly所以我不能使用它。

以下内容呈现“未定义书签”错误。

ActiveDocument.MailMerge.Fields("Surname").Code.Text = .txtSurname

有关如何在不使用数据源的情况下以编程方式更改邮件合并字段值的任何想法。

2 个答案:

答案 0 :(得分:3)

类似的东西:

Dim f as Word.Field

For Each f in ActiveDocument.Fields

  If f.Type = wdFieldMergeField Then

    ' you will either need to extract the name of the field from f.code here
    ' (roughly speaking, you should expect to find
    ' MERGEFIELD<white space><optional double quote>fieldname<optional double quote><white space><possible switches>
    ' or you could iterate through a list of field names and use instr to look for each name
    ' then

    f.Result.Text = "the text you want"
  End If
Next ' f

答案 1 :(得分:1)

我有一个Word文档,我想拥有DocVariable字段,我可以通过VBA从Access修改。我也想“看到”邮件合并字段。如果我使用DocVariable字段创建文档(例如,插入&gt;&gt;快速部件&gt;&gt;字段并插入DocVariable字段),则它们要么不可见,要么显示整个长字段代码。因此,假设我在一封信中有一个名为FNAMEDONATION的字段,感谢某人捐赠作为文件。

最终文件应如下所示:

  

...感谢鲍勃捐赠100美元。它会......

使用DocVariable字段,它看起来像这样:

  

...谢谢你的捐款。它会......

或者像这样:

  

...感谢{DOCVARIABLE“FNAME”}捐赠{DOCVARIABLE“捐赠”}。它会......

如果DocVariable字段中包含“* MERGEFORMAT”之类的东西,那么

甚至可能更长。这可能很愚蠢,但我绝对理解“看到”邮件合并字段的偏好,所以它看起来像这样

  

...感谢«FNAME»捐赠«捐赠»。它会......

我开始工作的方式是:

  1. 使用邮件合并字段创建文档。您可能必须创建一个伪Excel文件或数据库才能连接以添加字段。执行此操作后,您将“看到”文档中的邮件合并字段(例如«FNAME»)。
  2. 切换域代码(alt-F9),以便看到{ MERGEFIELD "FNAME"}
  3. 对于每个邮件合并字段,将“MERGEFIELD”替换为“DOCVARIABLE”。只需在其上键入,使其看起来像`{ DOCVARIABLE "FNAME"}
  4. 再次切换域代码(alt-F9)。它看起来像邮件合并字段(例如,“FNAME”),但您可以在VBA中使用它,就像DocVariable字段一样。
  5. 请注意,您实际上只需插入一个邮件合并字段,然后复制/粘贴它,更改不同字段的名称。如果您只是插入一个DocVariable字段,那么当您执行此操作时,必须存在隐藏在邮件合并字段中的某些内容,但是我无法弄清楚它是什么。所以这绝对是一种解决方法,但它对我有用。它为您提供两全其美的“看到”邮件合并字段,但可以像使用VBA中的DocVariable字段一样使用它。