【发布时间】:2015-09-05 08:36:20
【问题描述】:
我正在制作一个宏,我想做以下事情:
打开一个文件。
等待文件填满数据(此文件使用单元格公式从外部数据库下载数据,下载大约需要 15 秒)
- 20 秒后检查是否所有内容都已下载,如果没有,请再等待 10 秒(最多等待一分钟)。
- 如果所有内容都已下载,请存档并关闭文件。
我遇到的问题是停止代码执行一段时间,同时让公式自行更新 - 我在 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 试试this solution