Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSWord邮件合并OpenDataSource Excel范围问题_Excel_Vbscript_Ms Word_Mailmerge - Fatal编程技术网

MSWord邮件合并OpenDataSource Excel范围问题

MSWord邮件合并OpenDataSource Excel范围问题,excel,vbscript,ms-word,mailmerge,Excel,Vbscript,Ms Word,Mailmerge,我想使用VBScript来 打开已具有合并字段的Word文档 指定Excel文件和命名范围作为数据源 执行合并 类似以下Microsoft示例的代码在VBScript中不起作用,它似乎讨厌:=构造 With docNew.MailMerge .MainDocumentType = wdFormLetters .OpenDataSource _ Name:="C:\Program Files\Microsoft Office\Office" & _

我想使用VBScript来

  • 打开已具有合并字段的Word文档
  • 指定Excel文件和命名范围作为数据源
  • 执行合并
  • 类似以下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:="ExternalData_1"
    Connection:="TABLE ExternalData_1"
    Connection:="Sheet1$ExternalData_1"
    Connection:="TABLE Sheet1$ExternalData_1"
    
    通过指定连接,我希望避免附加图像文件中的对话框

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

    With Me.MailMerge
        .MainDocumentType = wdFormLetters
        .OpenDataSource Name:=sPath & XLSM, Connection:="SELECT * FROM [Sheet1$]", ReadOnly:=True, LinkToSource:=False, AddToRecentFiles:=False
    End With
    
    .OpenDataSource _
      "C:\Program Files\Microsoft Office\Office" & _
      "\Samples\Northwind.mdb",,,, _
      True, False,,,,,, _
      "TABLE Customers"
    
    我使用[Sheet1$]和[Sheet1$ExternalData_1]都没有成功


    此时,显示图像中显示的对话框是一个非常简单的问题,我不再试图解决它。但遗憾的是,答案如此难以捉摸。

    VBScript不允许命名参数,因此您必须使用类似以下的构造:

    With Me.MailMerge
        .MainDocumentType = wdFormLetters
        .OpenDataSource Name:=sPath & XLSM, Connection:="SELECT * FROM [Sheet1$]", ReadOnly:=True, LinkToSource:=False, AddToRecentFiles:=False
    End With
    
    .OpenDataSource _
      "C:\Program Files\Microsoft Office\Office" & _
      "\Samples\Northwind.mdb",,,, _
      True, False,,,,,, _
      "TABLE Customers"
    
    根据数据源的类型(例如Access数据库、文本文件、Excel工作簿、Oracle数据库)以及连接到该源的方式(例如,使用Word文件转换器、DDE、ODBC、OLEDB),如何为.OpenDataSource指定参数会有很大不同。连接参数(例如“表客户”仅起作用(AFAIK)用于Access表,最初用于DDE连接(Access数据库的原始默认连接类型)。现在,大多数连接都是通过OLE DB进行的,通常需要指定SQL语句。您也可以省略Excel工作表的connection参数。顺便说一句,我认为LinkToSource参数在这种情况下也不会起任何作用

    所以你需要的更像这样(在“False”后面还有一个逗号):

    Word本身在工作表/表格名称周围插入“backtick”字符(UNICODE U+0060重重音),但您应该能够使用

      "SELECT * FROM [Sheet1$ExternalData_1]"
    
    如果你愿意的话


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

    不使用vba文件,而是将代码移到单词te中是有意义的mplate(邮件合并主文档)。因此,我现在使用的代码是:抱歉,我错误地将我的评论放在这里,然后又将其放在了myu原始帖子的编辑中。这就是代码所在的位置。好的,假设sPath&XLSM部分是正确的,剩下的问题是SQL参数需要称为SqlStatement,而不是Connection,这确实消除了不需要的对话框。