使用VBA更改Word MailMerge字段的值



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

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

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

使用DocVariables我使用下面的代码。这工作,所以我知道我有正确的想法,我的代码的其余部分工作良好。

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

但是,我不能练习如何对合并字段做同样的事情。我想做类似下面的事情(但是没有"value"属性要设置)。

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

.text属性是只读的,所以我不能使用它。

下面显示"Bookmark not defined"错误。

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

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

类似于

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

我有一个Word文档,我想有DocVariable字段,我可以通过VBA从Access修改。我也想"看到"邮件合并字段。如果我以DocVariable字段开始创建文档(例如,Insert>>Quick Parts>>Field和Insert a 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字段一样使用它。

请注意,您实际上可以只插入一个邮件合并字段,然后复制/粘贴它,更改不同字段的名称。当您这样做时,邮件合并字段中一定隐藏了一些东西,如果您只是插入DocVariable字段,则不存在这些东西,但我还无法弄清楚它是什么。所以这绝对是一个变通的办法,但它对我很有效。它为您提供了两全其美,"看到"邮件合并字段,但可以像使用VBA中的DocVariable字段一样使用它。

相关内容

  • 没有找到相关文章

最新更新