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

时间:2019-03-15 13:52:29

标签: excel vba ibm-midrange

我正在使用一组脚本,这些脚本通过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

2 个答案:

答案 0 :(得分:0)

我相信你

Dim qry As Connections

应阅读

Dim qry As WorkbookConnection

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

答案 1 :(得分: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次,我可以查看每个连接并关闭它们,刷新并重新打开它们。