我在针对Excel SpreadSheet触发SQL查询时遇到问题。我有一个Excel-2007电子表格,有大约1个lac行,有两列。第1列(cid)&第2栏(公司)。我想从sheet(tab1)中获取所有行,其中company =“spider”。我正在使用下面的代码。它给我的结果,但只有前1400行。如果我在1400行之后确实有公司=“蜘蛛”它无法通过下面的代码获取它。需要帮助。
Sub main()
On Error GoTo ErrHandler
Set cn = CreateObject("ADODB.Connection")
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & "; Extended Properties=Excel 8.0"
.Open
End With
Set ObjRes = cn.Execute("Select cid,company from [tab1$] where [company]= 'spider'")
result.Range("A:B").Clear
result.Range("A1").CopyFromRecordset ObjRes
cn.Close
Set cn = Nothing
Set ObjRes = Nothing
Exit Sub
ErrHandler:
cn.Close
MsgBox "dataerror"
End Sub
请提供您的宝贵意见/解决方案以解决此问题。如果你需要任何其他细节,请告诉我。
感谢。
答案 0 :(得分:6)
这在Excel 2007上对我有用:
Sub sofMain20021767()
Dim cn, ObjRes
Dim result
On Error GoTo ErrHandler
Set cn = CreateObject("ADODB.Connection")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0" _
& "; Data Source=" & ThisWorkbook.FullName _
& "; Extended Properties=""Excel 12.0 Macro;HDR=YES"""
.Open
End With
'
Set ObjRes = cn.Execute("SELECT cid,company FROM [tab1$] WHERE [company]= 'spider'")
'
' result.Range("A:B").Clear
' result.Range("A1").CopyFromRecordset ObjRes
Range("D:E").Clear
Range("D1").CopyFromRecordset ObjRes
'
cn.Close
Set cn = Nothing
Set ObjRes = Nothing
Exit Sub
ErrHandler:
MsgBox Err.Description
Set cn = Nothing
End Sub
!!!小心,将结果复制到Range(“D:E”),删除这两列的旧数据。
如图所示,在记录2和记录2838上找到“蜘蛛”,即>第1400行。
扩展属性=“Excel 12.0宏; HDR = YES”定义带有宏的Excel文档,即MyDoc.xlsm文件,HDR = Yes表示第一行是标题,即列名。 有关其他格式的Excel文档,请参阅reference。
或者你可以遍历记录集:
'
'...
'
Range("D:E").Clear
'
'Range("D1").CopyFromRecordset ObjRes
'
'
' now we traverse the recordset:
'
Dim i
i = 1
'
Do While (Not ObjRes.EOF)
Range("D" & i).Value = ObjRes(0).Value
Range("E" & i).Value = ObjRes(1).Value
i = i + 1
ObjRes.MoveNext
Loop
'
'...
'