通过 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
格式,并进一步进行了测试。在某些情况下,节省时间看起来很合适:
- 大量工作表中的重大数据更改(48 秒)
Save
命令从新创建的 module
触发,没有任何其他更改 (5s)
- 我所有的图表(150pcs)都被删除了(1s)。显然,每张图表都额外提供了大约 1 秒的节省时间。我知道,我应该使用一个动态但该死的标签错误......之前完全没问题!
编辑 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
一些不寻常的现象开始影响我的宏。我有一个相对较大的 (13MB) excel 工作簿。 ThisWorkbook.Save
工作得很好。保存工作簿大约需要 10 秒(没有任何数据更改)。现在需要 2 分钟。 ThisWorkbook.Close SaveChanges:=True
也是如此。我在 Windows 7
.
Excel 2010
奇怪的是我可以手动保存工作簿而没有任何问题,例如 CTRL+S
或使用 Excel 菜单中的 Save icon
。这样,保存过程只需不到 10 秒,就像我的代码过去那样。
这种不必要的延迟的发生真是让我很烦恼。您有遇到过这样的问题吗?我正在寻找解决问题的方法。
编辑:
我已按照建议更改为 xlsb
格式,并进一步进行了测试。在某些情况下,节省时间看起来很合适:
- 大量工作表中的重大数据更改(48 秒)
Save
命令从新创建的module
触发,没有任何其他更改 (5s)- 我所有的图表(150pcs)都被删除了(1s)。显然,每张图表都额外提供了大约 1 秒的节省时间。我知道,我应该使用一个动态但该死的标签错误......之前完全没问题!
编辑 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