【问题标题】:MSWord MailMerge OpenDataSource Excel Range issueMSWord MailMerge OpenDataSource Excel Range 问题
【发布时间】:2016-07-30 22:13:23
【问题描述】:

我想用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 日编辑 在 Word 模板(邮件合并“主”文档)中不使用 vbs 脚本而是使用 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] 都没有成功。

此时,显示图像中显示的对话框是一个微不足道的问题,我不再尝试解决它。不过,太糟糕了,答案是如此难以捉摸。

【问题讨论】:

    标签: excel vbscript ms-word mailmerge


    【解决方案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 客户”之类的连接参数仅适用于(AFAIK)Access 表,并且最初用于 DDE 连接(原始默认连接Access 数据库的类型)。如今,大多数连接都是通过 OLE DB 进行的,通常您需要指定 SQL 语句。您也可以省略 Excel 工作表的连接参数。顺便说一下,我认为 LinkToSource 参数不会在这种情况下也可以做任何事情。

    所以你需要的更像是这样(“False”之后还有1个逗号):

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

    Word 本身会在工作表/表格名称周围插入“反引号”字符(UNICODE U+0060 GRAVE ACCENT),但您应该可以使用

      "SELECT * FROM [Sheet1$ExternalData_1]"
    

    如果您愿意。

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

    【讨论】:

    • 不使用 vba 文件,而是将代码移动到 Word 模板(邮件合并主文档)中是有意义的。所以现在我正在使用这段代码:
    • 对不起,我错误地把我的评论放在这里,然后也在对 myu 原始帖子的编辑中。这就是代码所在的位置。
    • OK,好吧假设sPath & XLSM部分是正确的,剩下的问题是SQL参数需要调用SqlStatement而不是Connection
    • 这确实消除了不需要的对话框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多