2011-10-24 3 views
3

Excelでは、IDの列があります。 ID列の値を条件とするテーブルから値を選択したいと思います。これまでのところ、私はエラーを取得するws.Cells(I、10)は、カラム内の行の各値にK.VBAからSQLを呼び出すときの動的なWHERE条件

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 

指し、これを、持っている「424」の行STEXTに、エラーメッセージ "Object required"。

私はまた、これを行うための最良の方法ではありません。ある列からWHERE条件を使用してSQLを実行するための簡単な設定が必要です。

ありがとうございました!

+2

は定義されていますか? –

+0

Excelには、Excelがデータベースと直接対話できるようにするための組み込みの接続、または少なくともプラグインがあると思います。また、文字列を連結することにも注意してください - SQLインジェクションは面倒です。 –

+0

データベースはSQL Serverですか?そうであれば、OpenRowsetが適合するかもしれません。同時に、SQLデータベースとExcelの両方からデータを取り出すことができます。 – Fionnuala

答えて

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

ないループ必要。