我正在创建一些代码,我可以在其中单击一个按钮,它将刷新我在该工作表上的查询表。
现在,我的问题是,在刷新之后,我有更多的代码来复制一些信息,但是这些代码是在刷新开始后立即运行的,并且这些信息还没有被替换。
我希望创建一个等待刷新完成的时间段,然后可以继续执行其余的代码。
我不想只等待5秒,而是等待刷新时间,这样我就不会等待太长或太短,这取决于网速等。
我该怎么做呢?
编辑:
简单的代码:
ActiveWorkbook.RefreshAll
在这里,我需要延迟或等待代码,直到所有刷新完成...然后
MsgBox("The Refreshing is Completed!")
那个方向上的一些东西。但在它实际完成之前,它不能说msgbox ...有时根据网速的不同,刷新需要更短或更长的时间,所以我希望它是实际刷新时间的一个变量。
发布于 2014-11-06 12:59:57
我正在使用一个PowerPivot模型,我想在保存和关闭该模型之前刷新数据。但是,excel只是在刷新完成之前关闭了模型,模型在打开时继续刷新。
在RefreshAll方法后面添加下面这行代码,就完成了这个任务:
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
我希望它也适用于你。
请确保禁用事件以加快速度。
请注意,我使用的是Excel 2010,我不确定此方法在旧版本中是否可用。
发布于 2012-01-19 13:48:59
在您的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
执行AddWebquery添加查询,然后执行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>
发布于 2012-10-12 09:01:31
我刚刚遇到了一个类似的问题,我们已经通过以下方法解决了它:
For i = 1 To ActiveWorkbook.Connections.Count
ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
'MsgBox ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery
Next
ActiveWorkbook.RefreshAll
这样,在调用false
之前,我们就能够确保所有连接的backgroundQuery
属性都是明确的刷新。
https://stackoverflow.com/questions/8925403
复制