“另存为”的多次使用会冻结Excel



我正在处理一个大文件,该文件包含多个(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

最新更新