我正在使用一组脚本,通过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
我相信你的
Dim qry As Connections
应该读
Dim qry As WorkbookConnection
ActiveWorksheets.Connections.Item属性返回WorkbookConnection类型的对象。如果您尝试从For Each
语句中一次刷新一个连接,则该对象表示与Refresh
等方法的单个连接,而不是所有连接的集合。
我设法解决了这个问题。所以将来可能需要这个的人都可以看到:
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次。