多次使用 SaveAs 会冻结 Excel
Posted
技术标签:
【中文标题】多次使用 SaveAs 会冻结 Excel【英文标题】:Multiple uses of SaveAs freezes Excel 【发布时间】:2016-01-04 16:51:15 【问题描述】:我正在处理一个包含多个 (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
我目前缓解此问题的尝试是暂停应用程序,以便后台进程可以做他们的事情。我在 SaveAs 行之后添加了以下代码。
Application.Wait (Now + Timevalue("0:00:05"))
【问题讨论】:
如果您尽可能直接引用工作簿/工作表并避免使用ActiveSheet property,您可能能够避免“拖延”循环。 ActiveWorkbook property 可能需要引用在将工作表复制到任何位置时创建的新工作簿。 【参考方案1】:“...暂停应用程序,以便后台进程可以做他们的事情。”
你试过DoEvents
吗?
这会将控制权交还给操作系统,并允许它在代码执行恢复之前完成任何未决事件。如果您处于锁定的循环中,您绝对应该使用它,以便您可以手动中断代码执行。
ActiveWorkbook.SaveAs Filename:=Filename
DoEvents
ActiveWorkbook.Close False
更多信息:DoEvents in VBA
【讨论】:
我欠你一杯啤酒。这正是需要的。没有冻结,没有挂起,运行平稳。 不用担心。如果通过勾选帖子左侧的绿色勾号有效,请不要忘记接受作为答案:)以上是关于多次使用 SaveAs 会冻结 Excel的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中重写 CIImage 最终会导致处理器下降到 0% 并冻结