从VBA调用SQL时的dynamicWHERE条件

在Excel中,我有一列ID。 我想select表中的值条件的ID列中的值。 到目前为止,我已经得到了这个,其中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”,错误信息“Object required”。

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

谢谢你的帮助!

我几乎肯定iDevlop是正确的 – 你没有定义你的variablesws ,这会导致“Object Required”错误消息。

无论如何,你可能会更喜欢这个解决scheme:

 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 + ")" 

没有必要的循环。