我正在跟踪在另一个网站上找到的代码。这是我的代码的基础知识:
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。这样做是有原因的,但通常没有必要。
查询表更典型的是设计时对象。也就是说,您创建一次 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/ http://dailydoseofexcel.com/archives/2004/12/13/parameters-in-excel-external-data-queries/这是 2003 年的版本,因此与后续版本很少有不一致之处。基础知识是相同的,只是如果您使用的是 2007 或更高版本,您可能需要了解 ListObject 对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)