我昨天问了一个类似的问题,我得到了答案,但现在我对我找到的解决方案有不同的问题。
我有一些 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
编译错误: 变量未定义
接下来,确保您的变量是在模块级别定义的,而不是在Sub
或Function
中定义的 - 这意味着其他Sub
s 和Function
s 可以"看到"变量:
没有:
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 SomeNumber
、Public SomeNumber
或Private 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