从VBA调用SQL时的动态WHERE条件

时间:2011-10-24 15:28:20

标签: sql excel vba select

在Excel中,我有一列ID。我想根据ID列中的值条件从表中选择SELECT值。到目前为止,我已经得到了这个,其中ws.Cells(i,10)引用了K列中每一行的值。

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array( _
    "ODBC;DSN=xxxx;Description=xxxxx;UID=xxx;APP=2007 Microsoft Office system;WSID=xxx" _
    ), Array("56;DATABASE=xxx;Trusted_Connection=Yes")), Destination:=Range( _
    "$M$3")).QueryTable        

    For i = 1 To 691
    sText = "SELECT Instrument.ID, Instrument.MATURITY FROM xxxx.dbo.Instrument Instrument WHERE Instrument.ID=" & ws.Cells(i, 10).Value & ""
    .CommandText = Array(sText)
    Next

End With

我在行sText上收到错误“424”,错误消息“需要对象”。

我也有预感,这不是最好的方法。必须有一个更简单的设置来运行带有WHERE条件的SQL。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我几乎肯定iDevlop是正确的 - 您还没有定义变量 ws ,这会导致出现“需要对象”错误消息。

无论如何,您可能更喜欢这个解决方案:

Dim IDs as String
Dim ws As Worksheet
Set ws = ActiveSheet
IDs = Join(WorksheetFunction.Transpose( _
           ws.Range(ws.Cells(1, 10), ws.Cells(691, 10))), ",")
.CommandText = "SELECT ... FROM ... WHERE Instrument.ID in (" + IDs + ")"

无需循环。