我正在创建一个宏,我想做以下事情:
打开文件。
等到文件填满数据(此文件使用单元格公式从外部数据库下载数据,下载大约需要15秒)
我遇到的问题是停止代码执行一段时间,同时让公式在此期间自行更新 - 我在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秒后更新)并通过上面的代码(在文件归档之前没有更新单个单元格。
答案 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