使用另一个命令按钮停止保存文件事件

时间:2013-05-08 23:06:33

标签: excel-vba excel-2007 vba excel

在vb中非常新。我有一个Excel文件,它是间隔自动保存。现在我想通过使用另一个命令按钮停止这个自动保存功能... plz帮助我......他们是代码......

  

Private Sub AutoSave_Cmd_click()

     

dTime =时间+ TimeValue(" 00:00:05")'根据要求设置时间

     

使用应用程序

   .OnTime dTime, "AutoSaveAs"
   .EnableEvents = False
   .DisplayAlerts = False
   ThisWorkbook.SaveAs "C:\<My File Path>\Auto_Save_MACRO.xls"
   .EnableEvents = True
   Application.EnableEvents = False
     

结束

     

End Sub

现在我的问题是什么是停止自动保存功能的代码通过&#34; Stop_Auto_Save_Cmd&#34;命令按钮?请帮助我...提前致谢...

  

Private Sub Stop_Auto_Save_Cmd_click()

     

&#39;这里的代码是什么?

     

End Sub

1 个答案:

答案 0 :(得分:2)

您的代码段看起来很像找到的代码here - 区别在于我认为链接中的代码有效,而您的代码可能没有。

当我描述“工作”代码是如何工作的时候,你应该能够找出你的代码没有的原因:

Public dTime As Date 

Sub AutoSaveAs() 
    dTime = Time + TimeValue("00:05:00") 
    With Application 
        .OnTime dTime, "AutoSaveAs" 
        .EnableEvents = False 
        .DisplayAlerts = False 
        ThisWorkbook.SaveAs "FilePath&NameHere(no .xls)" 
        .EnableEvents = True 
    End With 
End Sub 

在这里,您会看到在模块级别声明的Public变量dTime;它被设置为一个名为AutoSaveAs()的例程中的合理时间(现在+5分钟),然后指示Application(即Excel)在计时器时执行对AutoSaveAs的另一个调用耗尽(在这个例子中,每五分钟一次)。设置“在五分钟后再次给我打电话”命令后,它会执行实际的SaveAs,并禁用警报。

要实现这一点,您需要第一次致电AutoSaveAs;之后,它将“自称”,因为计时器将每隔五分钟关闭一次(就像你喜欢的那样,该功能会持续按下自己的贪睡按钮)。这可以在与单击“自动保存”功能的按钮相关联的代码中完成(或者可能是AutoOpen事件 - 它取决于您想要的行为):

Private Sub AutoSaveOn_Click()
    AutoSaveAs
End Sub

最后,你需要一些东西来“关闭”事件循环(而不是“打盹”,在闹钟上“关闭”)。把它放在另一个(“关闭”)按钮的处理程序中:

Private Sub AutoSaveOff_Click()
    Application.OnTime dTime, "AutoSaveAs", , False 
End Sub

第四个参数False表示“取消预定”。它关闭了第一次调用AutoSaveAs时启动的“无限循环”。如果你愿意,它会拔掉闹钟。

要完成,您必须为文件关闭时添加一个处理程序 - 因为如果您关闭工作簿但Excel保持打开状态,计时器将继续运行,这将产生一个非常奇怪和烦人的错误消息。所以你需要做这样的事情:

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Application.OnTime dTime, "AutoSaveAs", , False 
End Sub 

注意 - 我轻轻地改编了我上面给出的链接的代码,并且想要归功于原作者(Dave Hawley)的例子。我所做的就是展示如何解释它(从相似性到你所拥有的代码,我认为你已经看过同一个网站,或者至少有一份网站副本......)