|
- Sub test()
- Dim cnn As Object, rst As Object
- Set cnn = CreateObject("ADODB.Connection")
- Set rst = CreateObject("ADODB.Recordset")
- cnn.Open "Provider=Microsoft.ace.OLEDB.12.0;Extended Properties='excel 12.0;hdr=yes;imex=1';Data Source=" & ThisWorkbook.Path & "\文件夹\源信息.xlsm" '
- SQL = "select * from [供货商$]"
- With Sheets("sheet2")
- .Cells.Clear
- rst.Open SQL, cnn
- If rst.EOF = False Then i = rst.Fields.Count
- For j = 1 To i
- .Cells(1, j) = rst.Fields(j - 1).Name
- Next j
- .[a2].CopyFromRecordset rst
- End With
- rst.Close '关闭记录集
- cnn.Close '关闭数据库连接
- Set rst = Nothing '从内存释放
- Set cnn = Nothing '从内存释放
- End Sub
复制代码
上述代码供参考,我使用你的附件测试可以取数
你原来的问题:
我猜一个原来的代码是从access而非excel取数的,所以你移植使用有问题
问题1:是ado从excel取数连接字符串,一般为:
CNN.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='excel 12.0;hdr=yes;imex=1';Data Source=" & ThisWorkbook.FullName
问题2:你表示数据源 ThisWorkbook.Path & "E:\文件夹\源信息.xlsm"
如果你数据源是固定在e盘的话:Data Source=" E:\文件夹\源信息.xlsm"
如果数据源想取相对位置使用:Data Source=" & ThisWorkbook.Path & "\文件夹\源信息.xlsm"
问题3:返回数据使用sql语句,你取数的那句貌似是access的命令
问题4:数据返回一般使用:
- CNN.Execute(Sql) -个人推荐
- range.CopyFromRecordset rst -个人推荐
- arr = Application.Transpose(rst.GetRows) -个人不推荐 一行数据返回1维数组,多行数据返回二维数组
- st = rst.GetString -个人不推荐 还需要转换为数组
上述选择任意一个使用
你原来代码中 8 、9、 10行全上了,不知道8 行9行的意义何在
|
|