gpt4 book ai didi

excel - StopTimer() 不工作。需要一种在 excel 中重新启动计时器的方法

转载 作者:行者123 更新时间:2023-12-04 20:04:00 24 4
gpt4 key购买 nike

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

我有一些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

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

我遇到的主要问题在这里得到了解决。但我发表的另一篇文章也帮助我完成了一些工作。 Linked here

解决方案复制到这里。

最佳答案

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

没有:

Sub BadCode()
MsgBox 10 + NotAVariable
End Sub

10



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

Compile Error: Variable not defined



接下来,确保您的变量是在模块级别定义的,而不是在 Sub 中。或 Function - 这意味着其他 Sub s 和 Function s 可以“看到”变量:

没有:
Sub Part1()
Dim SomeNumber AS Long
SomeNumber = 4
End Sub

Sub PartB()
MsgBox 10 + SomeNumber
End Sub

Compile Error: Variable not defined



和:
Dim SomeNumber AS Long

Sub Part1()
SomeNumber = 4
End Sub

Sub PartB()
MsgBox 10 + SomeNumber
End Sub

14



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

关于excel - StopTimer() 不工作。需要一种在 excel 中重新启动计时器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com