|
楼主 |
发表于 2014-3-11 16:22
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
liucqa 发表于 2014-3-11 15:52
把查询文件的行数增加到1000行,1、2的时间就差不多了,而3的时间会非常短(因为没查询)
说明在文件小的 ...
同意你最后说的书写方法,即使是运行不产生查询的SQL语句,最好也用Set rs=cnn.Execute(SQL)的方式
其实我们讨论的是有无set rs……的问题,与查询文件的行数无关,请看下面两段,后者速度非常快:
- Sub aaa() '仅连接工作簿,不做任何操作
- tt = Timer
- Dim cnn As Object, SQL$, Mypath$, MyName$, arr, brr(1 To 60000, -1 To 11), i&, j&, m&, n&
- Application.ScreenUpdating = False
- Mypath = ThisWorkbook.Path & ""
- MyName = Dir(Mypath & "*.xls")
- Do While MyName <> ""
- If MyName <> ThisWorkbook.Name Then
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyName
- End If
- MyName = Dir()
- Loop
- cnn.Close
- Set cnn = Nothing
- MsgBox Timer - tt
- End Sub
- Sub bbb() '第一次连接时,创建一个不可能有记录的查询SQL = "select * from [Sheet1$a2:l] where 1=2"
- tt = Timer
- Dim cnn As Object, SQL$, Mypath$, MyName$, arr, brr(1 To 60000, -1 To 11), i&, j&, m&, n&
- Application.ScreenUpdating = False
- Mypath = ThisWorkbook.Path & ""
- MyName = Dir(Mypath & "*.xls")
- Do While MyName <> ""
- If MyName <> ThisWorkbook.Name Then
- Set cnn = CreateObject("ADODB.Connection")
- cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath & MyName
- If m = 0 Then
- SQL = "select * from [Sheet1$a2:l] where 1=2"
- Set rs = cnn.Execute(SQL)
- m = 1
- End If
- End If
- MyName = Dir()
- Loop
- cnn.Close
- Set cnn = Nothing
- MsgBox Timer - tt
- End Sub
复制代码 说明:我把52个待查询工作簿数据增加到了1000行 |
|