MSWord MailMerge OpenDataSource Excel 范围问题

MSWord MailMerge OpenDataSource Excel Range issue

我想使用 VBScript 来

  1. 打开一个已有合并字段的 Word 文档
  2. 指定一个 Excel 文件和命名范围作为数据源
  3. 执行合并

类似于以下 Microsoft 示例的代码在 VBScript 中不起作用,它似乎讨厌 := 构造。

With docNew.MailMerge
    .MainDocumentType = wdFormLetters
    .OpenDataSource _
        Name:="C:\Program Files\Microsoft Office\Office" & _
        "\Samples\Northwind.mdb", _
        LinkToSource:=True, AddToRecentFiles:=False, _
        Connection:="TABLE Customers"
    MsgBox .DataSource.ConnectString
End With

为了帮助查明问题,我在 Word 文档中尝试了 VBA 代码,用 Excel 文件的路径替换示例的 Access mdb 文件。但我似乎找不到合适的东西作为 Connection 参数。我试过这些:

Connection:="ExternalData_1"
Connection:="TABLE ExternalData_1"
Connection:="Sheet1$ExternalData_1"
Connection:="TABLE Sheet1$ExternalData_1"

通过指定连接,我希望避免附件图像文件中的对话框。

编辑 2016 年 8 月 2 日 不使用 vbs 脚本而是在 Word 模板(邮件合并 "Main" 文档)中使用 vba 是有意义的。所以现在我的代码如下所示:

With Me.MailMerge
    .MainDocumentType = wdFormLetters
    .OpenDataSource Name:=sPath & XLSM, Connection:="SELECT * FROM [Sheet1$]", ReadOnly:=True, LinkToSource:=False, AddToRecentFiles:=False
End With

我已经使用了 [Sheet1$] 和 [Sheet1$ExternalData_1] 但都没有成功。

在这一点上,出现如图所示的对话框是一个微不足道的问题,我不再试图解决它。遗憾的是,答案是如此难以捉摸。

VBScript 不允许命名参数,因此您必须使用更像这样的结构:

.OpenDataSource _
  "C:\Program Files\Microsoft Office\Office" & _
  "\Samples\Northwind.mdb",,,, _
  True, False,,,,,, _
  "TABLE Customers"

如何为 .OpenDataSource 指定参数因数据源类型(例如 Access 数据库、文本文件、Excel 工作簿、Oracle 数据库)的不同而有很大差异 您如何连接到该源(例如使用 Word 文件转换器、DDE、ODBC、OLEDB。"TABLE Customers" 等连接参数仅适用于(AFAIK)访问 table , 最初用于 DDE 连接(Access 数据库的原始默认连接类型)。如今,大多数连接都是通过 OLE DB 建立的,通常您需要指定 SQL 语句。您也可以省略Excel sheet 的连接参数。顺便说一句,我认为 LinkToSource 参数在这种情况下也不会做任何事情。

所以你需要的是这样的("False"后面多了1个逗号):

.OpenDataSource _
  "C:\Program Files\Microsoft Office\Office" & _
  "\Samples\yourxlfile.xls",,,, _
  True, False,,,,,,, _
  "SELECT * FROM `Sheet1$ExternalData_1`"

Word 本身会在 sheet/table 名称周围插入 "backtick" 个字符(UNICODE U+0060 GRAVE ACCENT),但您应该可以使用

  "SELECT * FROM [Sheet1$ExternalData_1]"

如果你愿意的话。

如果数据源是 sheet 名称,例如 "mysheet",您必须附加一个“$”。可能值得指出的是,并非所有命名范围都由 OLE DB 提供程序(或 ODBC 驱动程序)作为数据源提供。特别是,您可能希望使用“数据”选项卡上的各种数据导入选项插入的 table 可用,但它们不可用。此外,某些命名范围仅在工作簿已在 Excel.

中打开时才可用作数据源