通过以下过程,您可以使用ADO从关闭的工作簿中检索记录集并读取/写入数据。

像这样调用过程:

GetWorksheetData“ C:FoldernameFilename.xls”,“ SELECT * FROM [SheetName $];”,ThisWorkbook.Worksheets(1).Range(“ A3”)

用要从中检索数据的工作表名称替换SheetName。

子GetWorksheetData(strSourceFile作为字符串,strSQL作为字符串,TargetCell作为范围)

昏暗cn作为ADODB.Connection,rs作为ADODB.Recordset,f作为整数,r只要TargetCell什么都没有然后退出子集cn = New ADODB.Connection on Error Resume Next Next cn.Open“ DRIVER = \ {Microsoft Excel Driver( * .xls)}; DriverId = 790; ReadOnly = True;“ &_“ DBQ =”&strSourceFile&“;”

‘DriverId = 790:Excel 97/2000’DriverId = 22:Excel 5/95’DriverId = 278:Excel 4’DriverId = 534:Excel 3出错时转到0如果cn无效则MsgBox“找不到文件! “,vbExclamation,ThisWorkbook.Name退出子结束如果’打开记录集,则rs =新ADODB.Recordset错误恢复下一个rs.Open strSQL,cn,adOpenForwardOnly,adLockReadOnly,adCmdText’rs.Open”从[SheetName $]中选择” ,_ cn,adOpenForwardOnly,adLockReadOnly,adCmdText’rs.Open“选择来自[SheetName $]”。 ‘“,_ cn,adOpenStatic,adLockOptimistic,adCmdText’rs.Open”从[SheetName $]的位置[字段名称]像’A%’ORDER BY [字段名]一样“,_ cn,adOpenStatic,adLockOptimistic,adCmdText’可选检索记录集的方法’Set rs = cn.Execute(“ [A1:Z1000]”)’第一个工作表’Set rs = cn.Execute(“ [DefinedRangeName]”)’任何工作表出错转到0如果rs没什么然后MsgBox“无法打开该文件!”,vbExclamation,ThisWorkbook.Name cn.Close设置cn = Nothing Exit Sub End如果RS2WS rs,TargetCell’TargetCell.CopyFromRecordset rs’Excel 2000或更高版本的可选方法,如果rs.State = adStateOpen然后rs.Close结束Set rs = Nothing cn.Close Set cn = Nothing End Sub宏示例假定您的VBA项目已添加对ADO对象库的引用。

您可以通过在VBE中选择“工具”,“引用”并选择“ Microsoft ActiveX数据对象x.x对象库”来执行此操作。