vba - 延迟 VBA 代码操作而不卡住 Excel

标签 vba excel wait

我正在编写一个 VBA 宏,它将简单地打开另一个工作簿,刷新所有,保存,然后关闭。它将在第二个工作簿中重复此操作。然后它刷新并保存运行 VBA 代码的主工作簿。我面临的问题是正在打开的两个工作簿正在使用 Microsoft 查询从我们的 JobBoss 数据库中提取数据,并且它设置为在打开文件时刷新这些数据。因此文件打开,开始刷新查询数据,然后 VBA 代码尝试同时刷新导致错误。此外,在尝试保存和关闭数据之前,它不会等待数据完成刷新。

有没有办法在不卡住 Excel 应用程序的情况下延迟每个操作?

我试过application.wait但是 Excel 在此期间被卡住,并且数据不会在后台刷新,因为一旦时间结束 Excel 就会解冻,我仍然收到有关在刷新正在进行时尝试执行操作的错误。

这是我到目前为止所拥有的:

Sub Refresh_All()
'
' Refresh_All Macro
'
' Keyboard Shortcut: Ctrl+r
'
    ChDir "Q:\Quality Control"
    Workbooks.Open Filename:= _
        "Q:\Quality Control\Internal Failure Log - Variable Month.xlsm"
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Save
    ActiveWindow.Close
    ChDir "Q:\Reports"
    Workbooks.Open Filename:= _
        "Q:\Reports\Finished-Transfer Report-variable month.xlsm"
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Save
    ActiveWindow.Close
    ActiveWorkbook.RefreshAll
    ActiveWorkbook.Save
End Sub

最佳答案

此代码在进入并在我的所有查询表上禁用后台刷新后有效。

Sub Refresh_All()
'
' Refresh_All Macro
'
' Keyboard Shortcut: Ctrl+Y
'
    ChDir "Q:\Quality Control"
    Workbooks.Open Filename:= _
        "Q:\Quality Control\Internal Failure Log - Variable Month.xlsm"
    Dim endTime As Date
    endTime = DateAdd("s", 2, Now())
    Do While Now() < endTime
DoEvents
    Loop
    ActiveWorkbook.RefreshAll
       endTime = DateAdd("s", 10, Now())
    Do While Now() < endTime
        DoEvents
    Loop
ActiveWorkbook.Save
    endTime = DateAdd("s", 5, Now())
    Do While Now() < endTime
        DoEvents
    Loop
    ActiveWindow.Close
    ChDir "Q:\Reports"
    Workbooks.Open Filename:= _
        "Q:\Reports\Finished-Transfer Report-variable month.xlsm"
        endTime = DateAdd("s", 2, Now())
    Do While Now() < endTime
        DoEvents
    Loop
ActiveWorkbook.RefreshAll
     endTime = DateAdd("s", 10, Now())
    Do While Now() < endTime
        DoEvents
    Loop
ActiveWorkbook.Save
        endTime = DateAdd("s", 5, Now())
    Do While Now() < endTime
        DoEvents
    Loop
ActiveWindow.Close
    ActiveWorkbook.RefreshAll
        endTime = DateAdd("s", 10, Now())
    Do While Now() < endTime
        DoEvents
    Loop
ActiveWorkbook.Save
End Sub

关于vba - 延迟 VBA 代码操作而不卡住 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29569217/

相关文章:

.net - 一旦线程加入,如何通知线程停止等待互斥体?

java - 为什么所有 Java 对象都有 wait() 和 notify(),这会导致性能下降吗?

excel - 运行时错误 1004 "Method of Range Class Failed"

vba - 如何使用 SHDocVw.InternetExplorer 命令最大化由 VBA 创建的 IE 窗口?

excel - 使用 VBA 将 if 语句应用于单元格区域

javascript - 等待弹出窗口javascript

excel - VBA通过添加空格重命名

excel - VBA Shapes.AddTextbox 方法

arrays - 我将一个数组传递给 'xlsx' 以获取一个 Excel 文件,但我得到了在每一行中解析的数组元素

html - VBA - Google 新闻搜索结果的数量