dav*_*123 17 excel vba refresh excel-vba wait
我正在创建一些代码,我可以单击一个按钮,它将刷新我在该工作表上的查询表.
现在,我的问题是,在复制完一些信息之后,我有更多的代码,但是这个代码在刷新开始后立即运行并且信息尚未被替换.
我想创建一个等待刷新完成的时间段,然后其余的代码可以继续.
我不想只等待5秒钟,但是在刷新期间,我不会等待太长或太短,这取决于互联网速度等.
我怎样才能做到这一点?
编辑:
简单代码:
ActiveWorkbook.RefreshAll
Run Code Online (Sandbox Code Playgroud)
在这里,我需要延迟或等待代码,直到所有刷新完成...然后
MsgBox("The Refreshing is Completed!")
Run Code Online (Sandbox Code Playgroud)
那个方向的东西.但是在它实际完成之前它不能说msgbox ....有时候取决于互联网速度,刷新需要更短或更长,所以我希望它是实际刷新时间的变量.
在Web查询的外部数据范围属性中,您有一个复选框,上面写着"启用后台刷新",您应该取消选中该复选框以获得所需的效果.
看看这个页面的底部:http://www.mrexcel.com/tip103.shtml图片
编辑:
这是两个显示所需效果的宏:
Sub AddWebquery()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://de.selfhtml.org/html/tabellen/anzeige/table_tr_th_td.htm", _
Destination:=Range("$A$1"))
.Name = "table_tr_th_td"
.BackgroundQuery = False
.RefreshStyle = xlInsertDeleteCells
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "1"
.Refresh BackgroundQuery:=False
End With
End Sub
Sub TestRefreshing()
Range("A1").Clear
ActiveWorkbook.RefreshAll
Debug.Print "Test: " & Range("A1").Value
End Sub
Run Code Online (Sandbox Code Playgroud)
执行AddWebquery以添加Query,然后执行TestRefreshing以测试效果.您可以更改行.BackgroundQuery = False到True有错误的结果.
10秒睡眠的测试页:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SO-Test</title>
</head>
<body>
<?php
sleep(10);
?>
<table border="1">
<thead>
<tr><th>1</th></tr>
</thead>
<tbody>
<tr><td>2</td></tr>
</tbody>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我刚刚遇到了类似的问题,我们通过以下方式解决了这个问题:
For i = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
'MsgBox ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery
Next
ActiveWorkbook.RefreshAll
Run Code Online (Sandbox Code Playgroud)
像这样我们能够在调用刷新之前确定所有连接backgroundQuery属性false.
我正在使用PowerPivot模型,我想在保存并关闭模型之前刷新数据.但是,excel只是在刷新完成之前关闭了模型,并且模型在打开时恢复了刷新.
在RefreshAll方法之后添加以下行,就可以了:
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
Run Code Online (Sandbox Code Playgroud)
我希望它对你也有用.
确保禁用事件以加快速度.
请注意,我使用的是Excel 2010,我不确定此方法是否适用于旧版本.