项目重置后,应用程序对象对计时器不可用

时间:2017-09-13 12:41:50

标签: excel-vba vba excel

在Excel崩溃导致无法恢复工作簿的几个VBA工作小时后,我决定尝试编写自己的自动保存模块。它利用Application.OnTime方法定期保存,并且留给自己,它实际上做了它应该做的事情。

我将项目拆分为类模块和常规模块,因为I read here Application.OnTime无法访问类对象方法。这是我的两个模块的核心(剥离了不相关的东西)。代码段中引用了两个使用get / let,pIntervalpTimedSub的属性。将它们分别视为"00:00:30""Repeat_AutoSave"

CAutoSave.cls

Private pTimeReference As Date
Private pInterval As Date
Private pTimedSub As String

Public Property Let Interval(interval As String)
    ' Perform checks to see if interval is hh:mm:ss
    pInterval = TimeValue(interval)
End Property
Public Property Let TimedSub(subname As String)
    pTimedSub = subname
End Property

Public Sub Enable()

    Me.Repeat

End Sub

Public Sub Repeat()

    ThisWorkbook.SaveCopyAs "C:\Excel\wb.autosave.1.xlsm"
    ' pInterval is in the hh:mm:ss format
    pTimeReference = Now + pInterval
    ' pTimedSub is set to Repeat_AutoSave
    Application.OnTime pTimeReference, pTimedSub

End Sub

Public Sub Disable()

    If Not pTimeReference > TimeValue("00:00:00") Then
        Exit Sub
    End If

    ' pTimedSub is set to Repeat_AutoSave
    Application.OnTime pTimeReference, pTimedSub, , False
    pTimeReference = "00:00:00"

End Sub

AutoSave.bas

Private a As New CAutoSave

Public Sub Create()
    a.Interval = "00:00:30"
    a.TimedSub = "Repeat_AutoSave"
    a.Enable()
End Sub

Public Sub Destroy()
    a.Disable()
End Sub

Public Sub Repeat_AutoSave()

    a.Repeat

End Sub

现在,如前所述,留给自己这很好。重置项目时出现问题。通过在Excel的解析器抛出的任何错误上按“结束”,或者只需按下IDE中的停止按钮。这将引发以下错误:Method 'OnTime' of object '_Application' failed。  我最初的直觉是使用Application中的CAutoSave.Repeata.Repeat Application传递给AutoSave.bas并在CAutoSave.cls中使用以下子声明:

Public Sub Repeat(ByRef app As Application)
    ' ...
    app.OnTime pTimeReference, pTimedSub
End Sub

但是同样的错误也让我失望了。这里究竟发生了什么,是否有任何方法可以阻止或规避它,以便自动保存不会中断?

0 个答案:

没有答案