我正在跟踪在另一个站点上找到的代码。这是我的代码的基础:
Dim SQL As String
Dim connString As String
connString = "ODBC;DSN=DB01;UID=;PWD=;Database=MyDatabase"
SQL = "Select * from SomeTable"
With Worksheets("Received").QueryTables.Add(Connection:=connString, Destination:=Worksheets("Received").Range("A5"), SQL:=SQL)
.Refresh
End With
End Sub
这样做的问题是,每当他们单击分配给它的按钮时,都会创建一个新的连接,而且似乎从未断开过该连接。经过测试后,我打开了电子表格,并且在“连接”下列出了许多版本的连接。
联系
连接1
连接2
我似乎也找不到关闭或删除连接的方法。如果在“.Refresh”之后添加“.delete”,则会出现1004错误。由于数据在后台刷新,因此无法执行此操作。
有什么想法如何关闭或删除连接?
最佳答案
您可能会问自己,为什么每次在代码中都创建QueryTable。有理由这样做,但是通常没有必要。
QueryTables通常是设计时对象。也就是说,您一次创建了QueryTable(通过代码或UI),然后刷新了QueryTable以获取更新的数据。
如果需要更改基础的SQL语句,则有一些选择。您可以设置提示输入值或从单元格获取值的参数。更改SQL的另一种方法是在现有QueryTable的代码中对其进行更改。
Sheet1.QueryTables(1).CommandText = "Select * FROM ...."
Sheet1.QueryTables(1).Refresh
您可以通过更改CommandText选择不同的列甚至不同的表。如果是其他数据库,则需要一个新的连接,但这很少见。
我知道这并不能直接回答您的问题,但是我认为确定您是否真的需要每次都添加QueryTable是第一步。
有关参数的更多信息,请参见http://dailydoseofexcel.com/archives/2004/12/13/parameters-in-excel-external-data-queries/。它用于2003年,因此与以后的版本几乎没有不一致之处。基本原理是相同的,如果您使用的是2007或更高版本,则可能只需要了解ListObject对象。
关于vba - 具有VBA的Excel 2010中带有VBA的Excel 2010中的查询表(QueryTables),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4926441/