1

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

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

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

使用 DocVariables 我使用以下方法。这行得通,所以我知道我的想法是正确的,并且我的其余代码工作正常。

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

但是,我无法锻炼如何对合并字段做同样的事情。我想做类似下面的事情(但没有要设置的“值”属性)。

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

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

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

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

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

4

2 回答 2

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
于 2013-04-16T19:02:13.057 回答
1

我有一个 Word 文档,我想拥有可以通过 VBA 从 Access 修改的 DocVariable 字段。我也想“看到”邮件合并字段。如果我创建的文档以 DocVariable 字段开头(例如,Insert>>Quick Parts>>Field 并插入一个 DocVariable 字段),它们要么不可见,要么显示整个长字段代码。因此,假设我有命名字段FNAME,并DONATION在一封信中感谢某人作为文档的捐赠。

最终文件应如下所示:

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

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

...感谢您对 . 它会...

或像这样:

...感谢 { DOCVARIABLE "FNAME"} 捐赠 { DOCVARIABLE "DONATION"}。它会...

如果 DocVariable 字段中包含 `* MERGEFORMAT' 之类的内容,甚至可能更长。这可能很愚蠢,但我绝对理解“看到”邮件合并字段的偏好,所以它看起来像这样

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

我让它工作的方式是这样的:

  1. 使用邮件合并域创建文档。您可能必须制作一个伪造的 Excel 文件或数据库来连接以添加字段。完成此操作后,您将“看到”文档中的邮件合并字段(例如,«FNAME»)。
  2. 切换域代码 (alt-F9),以便您看到{ MERGEFIELD "FNAME"}.
  3. 对于每个邮件合并字段,将“MERGEFIELD”替换为“DOCVARIABLE”。只需在它上面输入,使其看起来像`{ DOCVARIABLE "FNAME"}.
  4. 再次切换域代码 (alt-F9)。它看起来像一个邮件合并字段(例如,`«FNAME»'),但您可以在 VBA 中像 DocVariable 字段一样使用它。

请注意,您实际上可以只插入一个邮件合并字段,然后复制/粘贴它,更改不同字段的名称。如果您只是插入一个 DocVariable 字段,那么邮件合并字段中一定有隐藏的东西会被复制,但我无法弄清楚它是什么。所以这绝对是一种解决方法,但它对我有用。它为您提供了两全其美的优势,“看到”邮件合并字段,但可以像 VBA 中的 DocVariable 字段一样使用它。

于 2013-12-28T02:00:50.500 回答