MSWord MailMerge OpenDataSource Excel 范围问题
MSWord MailMerge OpenDataSource Excel Range issue
我想使用 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 参数。我试过这些:
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.
中打开时才可用作数据源
我想使用 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 参数。我试过这些:
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.
中打开时才可用作数据源