通过 VBA 在 Excel 中节省的时间太长

Too long saving time in Excel via VBA

一些不寻常的现象开始影响我的宏。我有一个相对较大的 (13MB) excel 工作簿。 ThisWorkbook.Save 工作得很好。保存工作簿大约需要 10 秒(没有任何数据更改)。现在需要 2 分钟。 ThisWorkbook.Close SaveChanges:=True 也是如此。我在 Windows 7.

上使用 Excel 2010

奇怪的是我可以手动保存工作簿而没有任何问题,例如 CTRL+S 或使用 Excel 菜单中的 Save icon。这样,保存过程只需不到 10 秒,就像我的代码过去那样。

这种不必要的延迟的发生真是让我很烦恼。您有遇到过这样的问题吗?我正在寻找解决问题的方法。


编辑:

我已按照建议更改为 xlsb 格式,并进一步进行了测试。在某些情况下,节省时间看起来很合适:


编辑 2:

今天这个问题已经消失了。 Save 命令再次正常运行,保存只需要几秒钟。不知道是什么导致了这个问题,但我担心它会回来并且有一天会再次影响我的宏。 Excel 绝对古怪!

由于手册 CTRL+S 有效,我使用 SendKey 方法,直到有更好的解决方案。它比 Save 命令快得多。像这样的错误简直要了我的命...

ThisWorkbook.Activate
SendKeys "^s"
DoEvents
ThisWorkbook.Close

这个怎么样?

Sub Macro1()

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

ThisWorkbook.Save

Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic

End Sub

我遇到了类似的问题,并为此苦苦挣扎了一段时间。即使是每个 0.5MB 的小文件,也需要将近 1 分钟才能保存。

在 100% 的情况下,SendKeys 对我不起作用。有时工作簿在 SendKeys 能够执行操作 ("^s") 之前关闭 Thisworkbook.Close SaveChanges:=False,即使在添加 Application.Wait Now() + TimeValue("0:00:05").

之后也是如此

不知何故(在我的例子中)它与 Application.CalculateBeforeSave 属性 有关。当更改为 False 工作簿时,几秒钟后就保存了。

Dim oWB as Workbook

Set oWB = Workbooks.Open(main_path & file_name, False, False)

oWB.Sheets(1).Calculate

Application.CalculateBeforeSave = False
oWB.Save
Application.CalculateBeforeSave = True

oWB.Close savechanges:=False
set oWB = Nothing