【发布时间】:2017-08-30 05:33:00
【问题描述】:
我的问题可能很简单,但我找不到合适的解决方案。
我有几个 Excel 电子表格,在第一个电子表格中,我用唯一的 6 位数 ID 填充了 A 列
然后,使用 ADO 连接,我需要从第二个电子表格(包含大量数据)中获取与这些唯一 ID 对应的信息
到目前为止,我实现了下面的代码,但我很确定这不是最好或最快的方法(因为它非常慢)
当然,我有一个 VBA 例程,它可以在没有 ADO 的情况下执行此操作,但信息量越来越大,很快就会成为问题。
希望ADO能帮我管理一下,谢谢
Sub UpdateCurrentStatus()
Dim sSQLQry As String
Dim ReturnArray
Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset
Dim DBPath As String, sconnect As String
Dim UID As String
If MsgBox("Is the Labinal extract up-to-date?", vbYesNo) = vbNo Then Exit Sub
Application.ScreenUpdating = False
DBPath = Application.GetOpenFilename(Title:="Select second spreadsheet", FileFilter:="CSV (Comma delimited) (*.csv), *.csv")
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';FMT=Delimited(;)"
Conn.Open sconnect
y = 2
Do
UID = ThisWorkbook.Worksheets("Sheet1").Cells(y, 1).Value
sSQLSting = "SELECT [CurrentPhase] From [LabinalExtract$] where TicketReference =" & UID ' Your SQL Statement (Table Name= Sheet Name=[Sheet1$])"
mrs.Open sSQLSting, Conn
Sheets(1).Range("B2").CopyFromRecordset mrs
mrs.Close
y = y + 1
Loop While ThisWorkbook.Worksheets("Sheet1").Cells(y, 1) <> ""
Conn.Close
End Sub
【问题讨论】:
-
你的数据文件有多少行,你要查询多少个ID?您是否希望查询返回的记录始终为零或不返回?
-
你用每个循环覆盖你的输出,因为
CopyFromRecordset位置永远不会改变。 -
是的,你说得对,对不起,我没有意识到我覆盖了输出,会更正,感谢您的反馈,我会进一步检查循环主题