我正在使用一组脚本,这些脚本通过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
答案 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次,我可以查看每个连接并关闭它们,刷新并重新打开它们。