2015-07-02 63 views
1

以下代碼基於單元格值自動保存。Excel vba end autosave ontime loop

Sub AutoSaveIt() 
If Sheets("BOH General").Range("A102").Value > 0 Then 
    ThisWorkbook.Save 
    Application.OnTime Now + TimeSerial(0, Sheets("BOH General").Range("A102").Value, 0), "AutoSaveIt" 
End If 
End Sub 

我打的什麼代碼可以打破這個循環?

編輯:我試圖避免它重新打開工作簿,然後再次運行宏一旦被關閉

+0

相關的問題,也許:http://stackoverflow.com/q/4599796/2127508 – barrowc

回答

1

barrowc的鏈接給我我所需要的搜索詞,一篇文章 here

,我想出了一些代碼,似乎是工作 - 這裏的簡化版本,如果任何人需要它:

Public runwhen As Variant 


Sub AutoSaveTimer() 

If Sheets("BOH General").Range("A102").Value > 0 Then 
    RunWhen = Now + TimeSerial(0, Sheets("BOH General").Range("A102").Value, 0) 
    Application.OnTime EarliestTime:=RunWhen, Procedure:="AutoSaveIt", _ 
     Schedule:=True 
Else 
    On Error Resume Next 
    Application.OnTime EarliestTime:=RunWhen, Procedure:="AutoSaveIt", _ 
     Schedule:=False 
    On Error GoTo 0 
End If 

End Sub 


Sub AutoSaveIt() 

ThisWorkbook.Save 
Call AutoSaveTimer 

End Sub 


Private Sub Workbook_BeforeClose(Cancel As Boolean) 

'Cancel autosave 
Sheets("BOH General").Range("A102").Value = 0 
call AutoSaveTimer 

End Sub 
0

您可以使用BeforeClose事件來改變你的A102值爲零?

也許將其與Workbook_Open事件配對以將其更改回來。

編輯:

Sub AutoSaveIt() 
     If ThisWorkbook.Sheets(1).Range("A1").Value > 0 Then 
      ThisWorkbook.Save 
      Application.OnTime Now + TimeSerial(0, ThisWorkbook.Sheets(1).Range("A1").Value, 0), "AutoSaveIt" 
      Debug.Print "saved at " & Now() 
     End If 
    End Sub 

    Private Sub Workbook_BeforeClose(Cancel As Boolean) 
     ThisWorkbook.Sheets(1).Range("A1").Value = 0 
     ThisWorkbook.Save 
     Application.Quit 
    End Sub 


    Private Sub Workbook_Open() 
     ThisWorkbook.Sheets(1).Range("A1").Value = 1 
     Application.OnTime Now + TimeSerial(0, 0, ThisWorkbook.Sheets(1).Range("A1").Value), "AutoSaveIt" 
    End Sub 
+0

做到這一點,它仍然打開工作簿再次運行宏,發現值爲0並且不自動保存,我試圖避免它重新打開工作簿 – user2967539

+0

如果在BeforeClose事件結束時使用Application.Quit,該怎麼辦? – padawan0007

+0

考慮到,但用戶通常同時打開多個工作表 – user2967539