我正在处理一个大文件,该文件包含多个(100多个)客户端的数据。
需求:
- 每月生成客户活动摘要
- 必须为Excel可操作格式
- 必须是特定于客户端的。无法访问他人的信息
我的流程是有效的,但它挂起了,可能需要10-45分钟。
经过故障排除,我知道问题出在SaveAs方法上。评论说,排队并仍然允许文件生成和关闭不会导致挂断。
For i = 1 to Number_of_clients
'Data is sorted and placed in report tab (not shown)
'Code ensures only report tab is saved with no access to other data
ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Filename
ActiveWorkbook.Close
Application.DisplayAlerts = True
Next i
我目前试图缓解这个问题的方法是暂停应用程序,以便后台进程可以完成它们的工作。我在"另存为"行之后包含了以下代码。
Application.Wait (Now + Timevalue("0:00:05"))
"…暂停应用程序,以便后台进程可以执行它们的任务。"
你试过DoEvents
吗?
这将控制权交还给操作系统,并允许它在代码执行恢复之前完成任何挂起的事件。如果你在一个锁定的循环中,你肯定应该使用它,这样你就可以手动中断代码执行。
ActiveWorkbook.SaveAs Filename:=Filename
DoEvents
ActiveWorkbook.Close False
更多信息:VBA 中的DoEvents