我正在制作一个宏,我想做以下事情:
打开一个文件。
等待文件填满数据(该文件使用单元格公式从外部数据库下载数据,下载大约需要15秒)
- 20 秒后检查是否所有内容都已下载,如果没有,请再等待 10 秒(总共等待最多一分钟)。
- 如果所有内容都已下载,请存档并关闭文件。
我遇到的问题是停止代码执行一段时间,同时让公式自行更新 - 我在 MSDN 上读到以下内容后尝试了 Application.Wait:
等待方法会暂停所有 Microsoft Excel 活动,并可能会阻止您在等待生效期间在计算机上执行其他操作。然而,打印和重新计算等后台进程仍在继续。”
但它不起作用 - 等待停止了代码和数据下载。有没有办法让代码暂时停止,但让所有其他 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 秒后更新)并通过上面的代码(在文件存档之前没有更新任何单元格)。
我通常使用我为自己创建的这个子组件
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)