暂停代码执行但让Excel工作

时间:2015-06-19 11:17:02

标签: excel-vba vba excel

我正在创建一个宏,我想做以下事情:

  1. 打开文件。

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

  3. 20秒后检查是否所有内容都已下载,如果没有,请再等10秒钟(最多等待一分钟)。
  4. 如果已下载所有内容,请存档并关闭文件。
  5. 我遇到的问题是停止代码执行一段时间,同时让公式在此期间自行更新 - 我在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秒后更新)并通过上面的代码(在文件归档之前没有更新单个单元格。

1 个答案:

答案 0 :(得分: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