替换Excel中数据连接中的SQL命令文本

替换Excel中数据连接中的SQL命令文本,sql,vba,excel,Sql,Vba,Excel,有没有办法通过VBA替换Excel中数据连接中的SQL命令文本 例如,我有一个名为“Accounts”的数据连接,它在命令文本中有一个简单的查询 Select a.* from Recon a where a.recon in ('12345','67890') 我在sheet1(单元格A2到单元格A5)中构建了SQL语句,允许用户输入不同的“侦察”编号。而不是他们必须复制并粘贴到数据连接的命令文本中。我希望能够有一个宏,将SQL从单元格A2到单元格A5复制并粘贴到数据连接中的命令文本中

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

例如,我有一个名为“Accounts”的数据连接,它在命令文本中有一个简单的查询

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

我在sheet1(单元格A2到单元格A5)中构建了SQL语句,允许用户输入不同的“侦察”编号。而不是他们必须复制并粘贴到数据连接的命令文本中。我希望能够有一个宏,将SQL从单元格A2到单元格A5复制并粘贴到数据连接中的命令文本中,然后刷新连接到表1的数据连接。

根据连接类型,您可以使用

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

(wb是您正在使用的工作簿)


但是:请注意SQL注入

我最初是从这段代码开始的,这段代码可以在我的一些评论中看到

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

到目前为止,您尝试了什么,这很容易从listobject/querytable属性实现。这就是我到目前为止尝试的。子RefreshData()ActiveWorkbook.Connections(“Recon”).OLEDBConnection.CommandText=工作表(“Sheet1”).Range(“Recon_SQL”)ActiveWorkbook.Connections(“Recon”)刷新末尾子重要:考虑当Little Bobby Tables玩你的电子表格时会发生什么——这个想法是让包含隐藏的SQL和密码保护的选项卡,这样SQL就不会被操纵(是的,足够精明的用户可以进入数据连接并改变它,但它不关心)。另外,正在ping的数据库要求用户登录信息,因此如果发生了什么情况,DBA可以看到是谁做的。如果您的连接字符串有密码,则您使用的是SQL身份验证,就DBA而言,这意味着任何可能连接到数据库的内容。如果DBA需要知道是谁做的,请使用Windows身份验证。如何引用“Recon”的特定连接?我尝试了
Sub-RefreshData()ActiveWorkbook.Connections(“Recon”).OLEDBConnection.CommandText=工作表(“Sheet1”).Range(“Recon_SQL”)ActiveWorkbook.Connections(“Recon”).Refresh End Sub
 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