通过后台查询刷新多个ODBC连接

问题描述 投票:1回答:2

我正在使用一组脚本,通过ODBC从iSeries中提取大量不同的数据。

ActiveWorksheets.RefreshAll不起作用,因为它没有留出足够的时间来运行后台查询

我试过以下,但无济于事

Dim qry As Connections
'Set qry =

For Each qry In ActiveWorksheets.Connections
    qry.BackgroundQuery = False
    qry.RefreshAll
    DoEvents
Next qry

这给了我预期的Error 424对象。我不希望在这里使用Set qry =,因为我需要运行30个不同的连接

我们现在就把它们称为connection1,connection2等,因为它们的名字已经到处都是

是最简单的选项来停止后台查询,刷新,激活后台查询 - 在数据导入之前,还是有更好的方法?

我看了很多 - 但无法找到多个ODBC连接的信息

编辑:

Dim qry As WorkbookConnection

For Each qry In ActiveWorkbook.Connections
    qry.Refresh
    DoEvents
Next qry
excel vba ibm-midrange
2个回答
0
投票

我相信你的

Dim qry As Connections

应该读

Dim qry As WorkbookConnection

ActiveWorksheets.Connections.Item属性返回WorkbookConnection类型的对象。如果您尝试从For Each语句中一次刷新一个连接,则该对象表示与Refresh等方法的单个连接,而不是所有连接的集合。


0
投票

我设法解决了这个问题。所以将来可能需要这个的人都可以看到:

Dim qry As WorkbookConnection

For Each qry In ActiveWorkbook.Connections
    qry.ODBCConnection.BackgroundQuery = False
    qry.Refresh
    qry.ODBCConnection.BackgroundQuery = True
Next qry

虽然它看起来不像BackgroundQuery = True/False看起来不像这里至关重要。关闭它意味着你qry.Refresh,它拉取数据并刷新它。

另外使用For Each qry意味着我可以只查看每个连接并将其关闭,刷新并重新打开,而不是写出20次。

© www.soinside.com 2019 - 2024. All rights reserved.