MSWord MailMerge OpenDataSource Excel范围问题

时间:2016-07-30 22:13:24

标签: excel vbscript ms-word mailmerge

我想使用VBScript

  1. 打开已有合并字段的Word文档
  2. 指定Excel文件和命名范围作为数据源
  3. 执行合并
  4. 以下Microsoft示例的代码在VBScript中不起作用,VBScript似乎讨厌:= construct。

    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"
    

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

    编辑2016年2月2日 有意义的是不使用vb​​s脚本而是使用Word模板中的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]而没有成功。

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

1 个答案:

答案 0 :(得分:2)

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"仅适用于Access表(AFAIK),最初用于DDE连接(Access数据库的原始默认连接类型)。现在,大多数连接都是通过OLE DB完成的,通常需要指定一个SQL语句。您也可以省略Excel工作表的连接参数。顺便说一下,我没有&#39 ;在这种情况下,我认为LinkToSource参数会做任何事情。

所以你需要的更像是这样(在&#34之后还有1个逗号; False")

.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中打开时才可用作数据源。