Excel自动保存1004错误与临时文件

mm5n2pyu  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(235)

我们有一个.xlsm,每30秒自动保存一次(使用here中的解决方案创建)。
但偶尔,它会遇到“1004错误”,说它找不到一个8个字符的临时文件,并在vba行ThisWorkbook.Save上出错(来自上面的简单解决方案)。工作表中的数据量很小,保存时间不会超过一秒钟。
我还检查了“选项”-〉“保存”-〉“仅禁用此工作簿的自动恢复”,这似乎稍微缓解了但没有解决这个问题。
谢谢你的帮助。

zbdgwd5y

zbdgwd5y1#

我不确定这个特定的问题是否是导致您遇到错误的原因,但是您实现的自动保存功能中存在一个问题。
Application.OnTime是你可以告诉你如何称呼它;Application对象的方法。这意味着它不是从任何特定的工作簿/工作表中调用,而是从应用程序Excel本身调用。这意味着只要Excel打开,它就会继续运行。
因此,如果您打开了第二个(不相关的)工作簿,然后关闭了实现了自动保存功能的工作簿,则自动保存的代码将继续运行。如果你现在再次打开自动保存的工作簿,你会突然有2个自动保存循环在运行。所以每30秒自动保存2次。再做一次,你会有3个自动保存循环同时运行。
autoSave循环仅在完全关闭Excel时终止。
此问题可以通过在关闭工作簿之前终止OnTime调用来解决。您可以按如下所示执行此操作:
正常模块:

Global saveTimer As Variant

Sub Save1()
    ThisWorkbook.Save
    saveTimer = Now + TimeValue("00:00:30")
    Application.OnTime saveTimer, "Save1"
End Sub

工作簿模块:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnTime saveTimer, "Save1", , False
End Sub

Private Sub Workbook_Open()
    saveTimer = Now + TimeValue("00:00:30")
    Application.OnTime saveTimer, "Save1"
End Sub

使用此代码,如果关闭工作簿,当前运行的OnTime调用将终止。

相关问题