【问题标题】:Multiple uses of SaveAs freezes Excel多次使用 SaveAs 会冻结 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 可能需要引用在将工作表复制到任何位置时创建的新工作簿。

标签: excel vba save


【解决方案1】:

“...暂停应用程序,以便后台进程可以做他们的事情。”

你试过DoEvents吗?

这会将控制权交还给操作系统,并允许它在代码执行恢复之前完成任何未决事件。如果您处于锁定的循环中,您绝对应该使用它,以便您可以手动中断代码执行。


ActiveWorkbook.SaveAs Filename:=Filename
DoEvents
ActiveWorkbook.Close False

更多信息:DoEvents in VBA

【讨论】:

  • 我欠你一杯啤酒。这正是需要的。没有冻结,没有挂起,运行平稳。
  • 不用担心。如果通过勾选帖子左侧的绿色勾号有效,请不要忘记接受作为答案:)
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 2021-05-27
相关资源
最近更新 更多