2017-08-15 7 views
1

VBA経由でExcelのデータ接続でSQLコマンドテキストを置き換える方法はありますか?Excelのデータ接続にSQLコマンドテキストを置き換えます。

は例えば、私は、「アカウント」という名前のデータ接続を持っており、それは

Select a.* 
from Recon a 
where a.recon in 
('12345','67890') 

を述べコマンドテキストでの単純なクエリを持っている私は、セルA5を通じてシート1(セルA2に内蔵されたSQL文を持っています)を使用して、異なる「偵察」番号を入力することができます。代わりに、データ接続のコマンドテキストにこれをコピーして貼り付けなければなりません。私はコピーして、セルA2からセルA5を介してSQLをデータ接続のコマンドテキストに貼り付けて、Table1に接続されているデータ接続をリフレッシュするマクロを作成したいと考えています。

+0

これまでに試したことは、listobject/querytableプロパティから簡単に達成できました。 –

+0

これはこれまで私が試したことです。 サブrefreshdataを() ActiveWorkbook.Connections( "偵察") .OLEDBConnection.CommandText =ワークシート( "シート1")。レンジ( "Recon_SQL") ActiveWorkbook.Connections( "偵察")。 End Subのをリフレッシュ – AlmostThere

+0

重要:Little Bobby Tablesがスプレッドシートで動作するときに何が起こるかを考えてみましょう。https://xkcd.com/327/ –

答えて

0

私はもともと私は、試行錯誤を通じて、私は次のように到着した私のコメントの一部

Sub RefreshData() ActiveWorkbook.Connections 
("Recon") .OLEDBConnection.CommandText = Worksheets("Sheet1").Range("Recon_SQL") 
ActiveWorkbook.Connections("Recon").Refresh End Sub 

で見ることができ、このコードで始まりました。別のマクロを使ってSQL文字列テキストを作成し、その文字列をコマンドテキスト用に呼び出しました。

With ActiveWorkbook.Connections("Recon").OLEDBConnection 
     .BackgroundQuery = True 
     .CommandText = strsql 'SQL string created by recon_sql_string_creation macro 

     End With 

     ActiveWorkbook.Connections("Recon").Refresh 
End Sub 
1

CONNECTIONTYPEに応じて、(WBは、あなたが作業しているワークブックである)

wb.Connections(1).OLEDBConnection.CommandText = ... 

または

wb.Connections(1).ODBCConnection.CommandText = ... 

を使用して、コマンドテキストを変更することができます。

ただし、SQLインジェクションについて注意してください。

+0

"Recon"の特定の接続をどのように参照しますか? Range( "Recon_SQL")ActiveWorkbook.Connections( "Recon")。Refresh End Sub'を実行すると、Sub RefreshData()、ActiveWorkbook.Connections( "Recon")、 – AlmostThere

関連する問題