2016-09-21 3 views
0

このSQLクエリをExcelシートに表示しようとしていますが、マクロを実行するたびに何も起こりません。私はそこに表示することができますが、何も起こらないようにセルで範囲を追加しようとしました。コードを実行すると、エラーメッセージは表示されません。スプレッドシートに表示するVBAでSQLクエリを表示

Sub Run() 

Call ConnectDB 

Dim Cmd As ADODB.Command 
Dim rcs As ADODB.Recordset 
Dim SQL As String 
Dim res() As String 

Set Cmd = New ADODB.Command 
Set Cmd.ActiveConnection = con 

SQL = "select tl.id, al.price_crossing, al.price_exchange_fees, tl.charges_execution, tl.charges_mariana, tl.charges_exchange, tl.trade_date, un.value, tl.nb_crossing from mfb.trade_leg AS tl " & _ 
"inner join mfb.trade t on t.id = tl.id_trade " & _ 
"inner join mfb.instrument i on t.id_instrument = i.id " & _ 
"inner join mfb.instrument_type it on it.id = i.id_instrument_type " & _ 
"inner join mfb.options o on o.id_instrument = i.id " & _ 
"inner join mfbref.mfb.underlying un on un.id = o.id_underlying " & _ 
"inner join mfb.allocation_leg al on al.id_trade_leg = tl.id " & _ 
"where tl.trade_date > '20160101' and t.state = 3 " 

Cmd.CommandText = SQL 
Set rcs = Cmd.Execute() 


End Sub 
+0

スプレッドシートのセルに入れたコードは何ですか? – puzzlepiece87

+0

セットR =範囲( "A2:A6") –

+0

開始時に私はやった.... Dim R As Range ....その後、ちょうどコードの最後に追加されました.... Set R = Range( "A2:A6")..... –

答えて

2

あなたは良いスタートがありますが、最後にはデータでいっぱいの開いたレコードセットが残っています。あなたはそれを何もしません。あなたのワークシートに魔法のように表示されることはありません。範囲オブジェクトのメソッド.copyFromRecordsetを使用すると、レコードセットをワークシート範囲にすばやくダンプできます。

Sheet1.Range("A1").CopyFromRecordset rcs 

それは、セルA1でシート1にクエリの結果をダンプします:END SUBプットする前に、コードの終わりに

、。

質問のコメントに記載されているコードを使用するように更新されました。あなたのSet R = Range("A2:A6")あなたがRにダンプすること.copyfromrecordset方法を使用することができます後:徹底のために

R.CopyFromRecordset rcs 

を、また、あなたのレコードセットを反復処理し、偶数フィールドすることができます。あなたのレコードセットを読み込んだら、次のようなことができます:

Dim f as Adodb.Field 


'loop through each record 
While now rcs.EOF 

    'loop through all the fields in this record: 
    For each f in rcs.fields 
     'get the fields name and value: 
     debug.print f.name, f.value 
    Next f 

    'refer to a specific field (instead of looping through fields) 
    debug.print rcs.Fields("price_crossing").name, rcs.Fields("price_Crossing").value 

    'go to the next record 
    rsc.movenext 
Loop 
+0

助けてくれてありがとう。 –

+0

あなたは賭けました!上記のコメントに記載されているRange変数を使用するように更新されました。 – JNevill

+0

ええ、私はちょうど範囲を変更.... Sheet1.Range(Cells.Address).CopyFromRecordset rcs .....私はすべてのcelslを表示することができます –

関連する問題