从Word到Excel的VBA SQL连接不返回任何记录
我一直想弄清楚如何将Excel电子表格中的记录读取到Word文档中。我用的是Office 365。我发现一些文章已经连接到工作簿和工作表,但没有返回任何记录。 我引用了ActiveX数据对象2.8库 当代码到达消息框时,返回-1 帮忙?我错过了什么 这里是我在这一点上的代码从Word到Excel的VBA SQL连接不返回任何记录,excel,vba,ms-word,ado,recordset,Excel,Vba,Ms Word,Ado,Recordset,我一直想弄清楚如何将Excel电子表格中的记录读取到Word文档中。我用的是Office 365。我发现一些文章已经连接到工作簿和工作表,但没有返回任何记录。 我引用了ActiveX数据对象2.8库 当代码到达消息框时,返回-1 帮忙?我错过了什么 这里是我在这一点上的代码 Sub CreateLetter() Dim rs As ADODB.Recordset, rsCount As ADODB.Recordset Dim cn As ADODB.Connection Dim sqlGetT
Sub CreateLetter()
Dim rs As ADODB.Recordset, rsCount As ADODB.Recordset
Dim cn As ADODB.Connection
Dim sqlGetTbl As String
Dim sDataSource As String, sDataTable As String
Dim sProvider As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
sDataSource = "D:\spreadsheetname.xlsx"
sDataTable = "[Donor Contact List$]"
sProvider = "Microsoft.ACE.OLEDB.16.0;"
sDataSource = sDataSource & ";Extended Properties = 'Excel 12.0 Xml;HDR=Yes';"
With cn
.Provider = sProvider
.ConnectionString = "Data Source=" & sDataSource
.Open
End With
sqlGetTbl = "SELECT * FROM " & sDataTable
Set rs = cn.Execute(sqlGetTbl)
MsgBox rs.RecordCount
Do
With Selection
.TypeText FullName & Chr(11) & Street & Chr(11) & City & ", " & St & " " & Zip
.TypeParagraph
End With
Loop Until rs.EOF
rs.Close
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub以下内容适合我。在我使用的测试数据源中获取记录集信息的关键是在连接字符串中包含
IMEX=1
,以指定数据源具有头
问题中的代码还有其他问题:
rs.MoveFirst
来“初始化”记录集(将其放入第一条记录)rs.MoveNext
,否则代码将“卡在”第一条记录上并进入无限循环Do而不是rs.EOF
进行退出循环的测试更安全Nothing
)。在释放记录集之前不可能释放连接-活动记录集将保持连接“活动”Sub CreateLetter()
Dim rs As ADODB.Recordset, rsCount As ADODB.Recordset
Dim cn As ADODB.Connection
Dim sqlGetTbl As String
Dim sDataSource As String, sDataTable As String
Dim sProvider As String
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
sDataSource = "D:\spreadsheetname.xlsx"
sDataTable = "[Donor Contact List$]"
sProvider = "Microsoft.ACE.OLEDB.16.0;"
sDataSource = sDataSource & ";Extended Properties = 'Excel 12.0 Xml;HDR=Yes;IMEX=1';"
With cn
.Provider = sProvider
.ConnectionString = "Data Source=" & sDataSource
.Open
End With
sqlGetTbl = "SELECT * FROM " & sDataTable
cn.CursorLocation = adUseClient
Set rs = cn.Execute(sqlGetTbl)
MsgBox rs.RecordCount
rs.MoveFirst
Do While Not rs.EOF
With Selection
.TypeText rs.Fields("Fullname").value & Chr(11) & rs.Fields("street").value & Chr(11) & rs.Fields("city").value & ", " & st & " " & rs.Fields("Zip").Value
.TypeParagraph
End With
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
End Sub
请尝试使用
cn.CursorLocation=adUseClient
。如果这不起作用,请使用Recordset
(再次使用CursorLocation=adUseClient
)而不是Connection
。澄清一下-Excel等电子表格有单元格和行(而不是记录)。数据库表(如Access)有记录。不管怎样,有更简单的方法将数据导入Word,除非你有理由这样做。我建议从搜索Google开始“将Excel中的数据导入Word”根据最终目标的不同,有几种方法可以做到这一点。@ashleedawg使用ADO、DAO或ODBC作为数据源连接到Excel是很有可能的。在这种情况下,可以使用数据源术语、记录和字段。使用数据连接通常开销较小,比“自动化”更快由于文件可以直接访问,无需将其加载到Excel应用程序中;事实上,即使计算机上未安装Excel,也可以使用该文件。OP建议的方法非常有效,甚至值得推荐…@WinginSue是否有任何理由不使用mailmerge?无需代码。IMEX=True您可能是指 HDR=Yes
?@JohnyL No,我是说IMEX-原始代码已经包含了HDR
。但是,时间太晚了,我最后输入的是“True”而不是“1”。感谢您指出这一点!