Excel VBA中的自动保存正在重新打开已关闭的文件
我在我的一些excel工作表中实现了一些代码,这些代码会导致文件定期自动保存。我在代码中遇到的问题是,当它被执行时,它会重新打开已经关闭的文件,这些文件也包含相同的代码 我正在寻找一种让VBA自动保存文档的方法,但如果文件未打开,它将不再运行 这是我实现的代码: 包含在“本工作簿”中: 包含在“模块3”中:Excel VBA中的自动保存正在重新打开已关闭的文件,excel,vba,Excel,Vba,我在我的一些excel工作表中实现了一些代码,这些代码会导致文件定期自动保存。我在代码中遇到的问题是,当它被执行时,它会重新打开已经关闭的文件,这些文件也包含相同的代码 我正在寻找一种让VBA自动保存文档的方法,但如果文件未打开,它将不再运行 这是我实现的代码: 包含在“本工作簿”中: 包含在“模块3”中: 注意:所有文档之间的代码都是100%相同的(除了时间值,其中一些文档的时间值相差几个小时)。请尝试下一种方法: 将OnTime调用调整为更好的Sub: 将讨论中的子设为Private,并在模
注意:所有文档之间的代码都是100%相同的(除了时间值,其中一些文档的时间值相差几个小时)。请尝试下一种方法:
OnTime
调用调整为更好的Sub
:子设为Private
,并在模块顶部创建一个新的Public
变量:
如果我的上述假设是
正确的
,仅第3项就可以解决问题…正如您可能注意到的,OnTime
是一种应用程序
方法,而不是工作簿
方法
这意味着,即使关闭工作簿,只要Excel应用程序仍处于打开状态,OnTime
仍在倒计时。一旦它达到零,它将尝试运行子例程-但工作簿已关闭。Excel不会抛出错误,而是重新打开工作簿,然后运行子例程
为了停止此操作,您需要在关闭工作簿之前取消子程序的计划,这也意味着要存储时间。因此,您需要一个如下所示的模块:
Option Private Module
Option Explicit
Private AutoRunTime AS Date
Public Sub AutoSaveWorkbook()
ThisWorkbook.Save
AutoRunTime = Now()+TimeSerial(3,0,0) '3 hours
Application.OnTime AutoRunTime, "AutoSaveWorkbook", True
End Sub
Public Sub CancelAutoSave()
Application.OnTime AutoRunTime, "AutoSaveWorkbook", False
End Sub
然后,在
Workbook\u Open
中,您甚至可以调用AutoSaveWorkbook
开始工作,在Workbook\u BeforeClose
中,您甚至可以调用CancelAutoSave
结束工作为什么要使用VBA?Excel内置了它。内置的自动保存功能将只保存到一个驱动器,而不会保存到公司的服务器。它已通知他们无法修改(或只是拒绝),因此我唯一的选择是VBA。您可以使用关闭事件取消OnTime以取消OnTime
,过程
和早期时间
必须匹配:您的代码只会取消您在运行Save1
后一秒钟内关闭工作簿的操作…@Chronocidal:是的,您是对的。我必须创建一个Public
变量以保持la上次计划的时间。。。谢谢
Sub Save1()
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
Application.OnTime Now + TimeValue("03:00:00"), "Save1"
End Sub
Private Sub Workbook_Open()
scheduleTime = Now + TimeValue("03:00:00")
Application.OnTime scheduleTime, "Module3.Save1"
End Sub
Public scheduleTime As Date
Private Sub Save1()
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
scheduleTime = Now + TimeValue("03:00:00")
Application.OnTime scheduleTime, "Module3.Save1"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime scheduleTime , "Module3.Save1", , False
End Sub
Option Private Module
Option Explicit
Private AutoRunTime AS Date
Public Sub AutoSaveWorkbook()
ThisWorkbook.Save
AutoRunTime = Now()+TimeSerial(3,0,0) '3 hours
Application.OnTime AutoRunTime, "AutoSaveWorkbook", True
End Sub
Public Sub CancelAutoSave()
Application.OnTime AutoRunTime, "AutoSaveWorkbook", False
End Sub