vba - 使用 VBA 在 Excel 2010 中查询表 (QueryTables) 使用 VBA 创建许多连接

标签 vba excel excel-2010

我正在跟踪在另一个网站上找到的代码。这是我的代码的基础知识:

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/这是 2003 年的版本,因此与后续版本很少有不一致之处。基础知识是相同的,只是如果您使用的是 2007 或更高版本,您可能需要了解 ListObject 对象。

关于vba - 使用 VBA 在 Excel 2010 中查询表 (QueryTables) 使用 VBA 创建许多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926441/

相关文章:

excel - 插入行时修复公式

excel - 枢轴名称未分配,如何调试?

excel - 放置在工作表 1 中的 VBA 宏按钮可在隐藏的工作表 2 中运行宏

excel - 获取实际使用范围

VBA 计数颜色代码在某些空白单元格中无法正常工作

excel - 将 MS 转换为秒

excel - 编码变化范围

excel - 无法使用 Selenium 和 VBA 从网页的下拉列表中选择复选框

Excel:查找事务中的关键字并从映射列表中获取相应的性质

未为规划求解定义 VBA Sub