【问题标题】:Pause code execution but let Excel work暂停代码执行但让 Excel 工作
【发布时间】:2015-09-05 08:36:20
【问题描述】:

我正在制作一个宏,我想做以下事情:

  1. 打开一个文件。

  2. 等待文件填满数据(此文件使用单元格公式从外部数据库下载数据,下载大约需要 15 秒)

  3. 20 秒后检查是否所有内容都已下载,如果没有,请再等待 10 秒(最多等待一分钟)。
  4. 如果所有内容都已下载,请存档并关闭文件。

我遇到的问题是停止代码执行一段时间,同时让公式自行更新 - 我在 MSDN 上阅读后尝试了 Application.Wait:

Wait 方法会暂停所有 Microsoft Excel 活动,并且可能会阻止您在 Wait 生效时在您的计算机上执行其他操作。但是,打印和重新计算等后台进程仍在继续。”

但它不起作用 - 等待停止了代码和数据下载。有什么方法可以暂时停止代码,但让所有其他 Excel 活动继续?我希望宏能够完全无人看管地运行,因为它可能必须在半夜运行。

编辑:尝试了 Siddarth 的答案,但它对我不起作用。我试过的代码:

Sub processfile()

    Dim bbgwb As Workbook
    Dim filepath As String

    filepath = "C:\Test\0900CET.xls"
    Set bbgwb = Workbooks.Open(filepath)

    Wait 60

    filepath = "C:\Test\Archive\"
    If Len(Dir(filepath)) = 0 Then
        MkDir filepath
    Else
        'Do nothing.
    End If

    filepath = "C:\Test\Archive\0900.xls"

    bbgwb.Worksheets(1).Range("A1:AZ200").Copy
    bbgwb.Worksheets(1).Range("A1:AZ200").PasteSpecial xlPasteValuesAndNumberFormats
    bbgwb.Worksheets(1).Range("C142").Value = Now

    bbgwb.SaveAs Filename:=filepath, FileFormat:=56
    bbgwb.Close
    ThisWorkbook.Close

End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

0900CET.xls 有公式,打开它后,会自动更新数据(我想存储和存档,这就是我在最后添加整个复制/粘贴特殊部分的原因)。我刚刚测试了手动打开 0900CET.xls(所有公式在 17.3 秒后更新)并通过上面的代码(在文件存档之前没有更新单个单元格。

【问题讨论】:

标签: excel vba


【解决方案1】:

我通常使用我为自己创建的这个子

Sub Sample()
    '
    '~~> Do Something
    '
    Wait 5 '<~~ Wait for 5 seconds. Change as applicable
    '
    '~~> Do Something
    '
End Sub

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

【讨论】:

  • 考虑使用 Now,因为如果你过了午夜,Timer 会欺骗你。
  • 不幸的是,这个答案对我不起作用,我编辑了问题以添加测试结果,包括我目前拥有的代码。
  • 那是因为您在同一个 Excel 实例中打开文件。所以在没有打开文件之前,其余的代码都不会运行。
  • 我想我不明白你在这里说什么。只是为了更清楚地说明:我的所有代码都按预期执行,但是 Wait 子程序并没有按照我的意愿更新公式 - 它似乎占用了足够的系统资源,因此 60 秒的等待是不够的什么时候,如果手动打开,文件需要不到 20 秒的时间自行更新。
猜你喜欢
  • 2015-10-19
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2021-04-05
相关资源
最近更新 更多