2017-08-15 121 views
1

有没有办法通过VBA替换Excel中数据连接中的SQL命令文本?替换Excel中数据连接中的SQL命令文本

例如,我有一个名为“帐户”的数据连接,并具有在规定

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

我通过细胞A5内置一个工作表Sheet1(单元格A2的SQL语句命令文本的简单查询),允许用户输入不同的“侦察”号码。而不是将它们复制并粘贴到数据连接的命令文本中。我希望能够拥有一个宏,用于将单元格A2中的SQL复制并粘贴到数据连接的命令文本中,然后刷新连接到Table1的数据连接。

+0

到目前为止,您尝试了哪些操作,这很容易通过listobject/querytable属性实现。 –

+0

这是我到目前为止所尝试的。 子RefreshData() ActiveWorkbook.Connections( “行动”) .OLEDBConnection.CommandText =工作表( “工作表Sheet”)。范围( “Recon_SQL”) ActiveWorkbook.Connections( “行动”)。刷新 结束子 – 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.Connections(1).OLEDBConnection.CommandText = ... 

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

(WB与被你正在从事的工作簿)命令文本。

但是:请注意SQL注入!

+0

如何引用“侦察”的特定连接?我试过Sub RefreshData()ActiveWorkbook.Connections(“Recon”).OLEDBConnection.CommandText = Worksheets(“Sheet1”)。Range(“Recon_SQL”)ActiveWorkbook.Connections(“Recon”)。Refresh End Sub' – AlmostThere