停止计时器() 不工作.需要一种方法来重新启动我的计时器在 excel 中



我昨天问了一个类似的问题,我得到了答案,但现在我对我找到的解决方案有不同的问题。

我有一些 excel 代码,我已将其设置为自动保存。它被设置为在计时器上自动保存。我希望能够在手动保存项目时重置该计时器,但它似乎不起作用。

我在保存之前使用 Workbook_BeforeSave 命令做某事(理想情况下重置计时器(。这样,如果我手动保存工作簿,它将再次启动该计时器。

我尝试了这样的事情:

练习 册:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Call StopTimer
End Sub

模块:

Public Sub StartTimer()
RunWhen = Now + TimeValue("00:00:10")
cRunWhat = "AutoSave"
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
End Sub
Public Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
End Sub

但这似乎行不通。我什至尝试了一个简化版本,我启动一个计时器,然后手动运行 StopTimer,它不会停止计时器。

关于 StopTimer(( 应该如何工作,我是否缺少一些东西?

感谢您的任何帮助!

编辑:我使用的解决方案

我能够使用以下方法完成我想要的事情。

在工作簿中

我使用了函数 Workbook_BeforeSave(( 为了在保存后停止计时器。

Private Sub Workbook_BeforeSave(ByVal SaveAsUi As Boolean, _
Cancel As Boolean)
Call StopTimer
End Sub

这是调用模块 StopTimer((。这是在模块级别定义的。

Option Explicit
Public RunWhen
Public cRunWhat
Public Sub StartTimer()
RunWhen = Now + TimeValue("00:01:00")
cRunWhat = "Save"
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
End Sub
Public Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
StartTimer
End Sub

现在,我在工作簿中有一个调用 StartTime 的不同函数,而 Save(( 只是一个基本的保存工作簿函数。

我遇到的主要问题在这里得到了解决。但我发表的另一篇文章也帮助我度过了难关。链接在这里

此处复制解决方案。

首先,检查您的模块是否以魔术行Option Explicit开头 - 这意味着如果您在尝试使用它之前未显式定义变量,Excel 将引发错误。 否则,默认情况下会将其视为空白值。 实际上,在工具/选项("需要变量声明"(下有一个复选框,可以自动将其推到所有模块的顶部。

没有:

Sub BadCode()
MsgBox 10 + NotAVariable
End Sub

10

跟:

Option Explicit
Sub BadCode()
MsgBox 10 + NotAVariable
End Sub

编译错误: 变量未定义


接下来,确保您的变量是在模块级别定义的,而不是在SubFunction中定义的 - 这意味着其他Subs 和Functions 可以"看到"变量:

没有:

Sub Part1()
Dim SomeNumber AS Long
SomeNumber = 4
End Sub
Sub PartB()
MsgBox 10 + SomeNumber
End Sub

编译错误: 变量未定义

跟:

Dim SomeNumber AS Long
Sub Part1()
SomeNumber = 4
End Sub
Sub PartB()
MsgBox 10 + SomeNumber
End Sub

14

您可以使用Dim SomeNumberPublic SomeNumberPrivate SomeNumber- 使用Public也会让其他模块"看到"变量,而Private只会让该特定模块中的代码"看到"它。

我有一个类似的问题,我在每行结束后保存 - 但想在将来编辑多行时将自动保存计时器重置为 x 秒。

马可报告!保存功能不可用。用我的一个SaveasXLSB宏代替,它起作用了。

我希望这可以继续踢罐子,可以这么说,所以当系统闲置那么长时间/然后/它可以节省......

Option Explicit
Public RunWhen
Public cRunWhat
Public Sub StartTimer(Optional StrTimevalue As String = "00:00:10")
RunWhen = Now + TimeValue(StrTimevalue)
cRunWhat = "SaveAsDefaultXLSB"
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=True
End Sub
Public Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, Schedule:=False
StartTimer ""
End Sub

最新更新