EXCEL VBA刷新等待

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (64)

我正在创建一些代码,在其中我可以单击一个按钮,它将刷新我在该工作表上的查询表。

现在,我的问题是,在更新之后有更多的代码复制一些信息,但是在刷新开始之后,这些代码正在运行,而且信息还没有被替换。

我想要为刷新完成创建一个等待期,然后代码的其余部分可以继续。

我不想仅仅等待5秒,而是等待清爽的时间,这样我就不会等待太长或太短,这取决于互联网的速度等等。

我该怎么做?

简单代码:

ActiveWorkbook.RefreshAll

在这里,我需要延迟或等待代码,直到所有刷新完成。然后

MsgBox("The Refreshing is Completed!")

那个方向的东西。但它不能说在它真正完成之前的味精盒..。有时取决于互联网的速度,刷新所需时间更短或更长,所以我希望它是实际刷新时间的一个变量。

提问于
用户回答回答于

我刚刚遇到了一个类似的问题,我们通过以下方法解决了这个问题:

For i = 1 To ActiveWorkbook.Connections.Count
    ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery = False
    'MsgBox ActiveWorkbook.Connections(i).OLEDBConnection.BackgroundQuery
Next

ActiveWorkbook.RefreshAll

就像这样我们能确保所有的连接backgroundQuery是确定的false在调用刷新之前。

用户回答回答于

在Web查询的外部数据范围属性中,有一个复选框,上面写着“启用背景刷新”,应该取消选中,以达到预期效果。

下面是两个显示所需效果的宏:

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添加查询,然后执行TestRefresching测试效果。你可以换行.BackgroundQuery = FalseTrue有错误的结果。

10秒睡眠的TestPage:

<!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>

扫码关注云+社区