【发布时间】:2021-10-23 18:52:03
【问题描述】:
在我的代码中:
Sub bouttonPause()
Pauz = MsgBox("Do you want to stop the loop?", vbQuestion + vbYesNo + vbDefaultButton2, "Stop")
End sub
Sub startSAbutton()
Pauz = vbNo
Call SA
End sub
Sub SA()
Application.ScreenUpdating = False
'If user didnt click on pauz button
If Pauz <> vbYes Then
--things
'# Restart macro every 15 minutes
Application.OnTime Now + TimeValue("00:15:00"), "SA"
Application.ScreenUpdating = True
End If
End Sub
如您所见,这是一个每 15 分钟重新启动一次宏的循环。如果你想停止这个循环,你点击一个暂停按钮,这样 Pauz = vbYes 并且这个“if”不能被“触发”
If Pauz <> vbYes Then
但是,如果用户在早上 8 点启动宏:
08:15 将重新启动宏,08:30、08:45 等也是如此
现在假设用户在 08:21 点击暂停按钮并选择是选项,在 08:30 宏将不会启动
但是如果在 08:27 他点击 startSA 按钮,Pauz 将是 vbNo 并且:
-
一个循环将从 08:27 开始,每 15 分钟循环一次
-
08:30、08:45 等的循环将恢复为现在 Pauz = vbNo
换句话说,我怎样才能取消第一个循环并确保它在开始另一个循环之前不再启动
编辑:澄清 为了缩短我的问题:
- 我点击 bouttonPause:pauz = no,每 15 分钟启动一次循环
- 我单击 startSA 按钮:pauz = 是,循环不会在下一次出现时开始,并且
- 但是:如果我点击 pausebutton 来循环#1 然后点击 startSAbutton 来给循环#2 加注星号,pauz 变量将为 no 然后是,所以当下一个循环#1 将尝试在下一次出现时启动它会成功,因为现在 pauz = yes。然后我将运行两个循环。这就是我想要阻止的,我想要它,所以当我开始一个新循环时,它会取消前一个循环。
请原谅我糟糕的英语并感谢您的阅读。 祝你有美好的一天!
【问题讨论】:
-
将您的行
--do things替换为Else?并确保Application.ScreenUpdating = True出现在End If之后,以防 if 语句没有被触发。 -
SA运行时您是否按下该按钮?Pauz是否已在模块顶部声明(在声明区域中)?否则为局部变量,只在它诞生的Sub有效,对startSAbutton没有任何意义。请在所有模块的顶部写上Option Explicit。这将迫使您声明所有变量,因为它应该更好。 -
我可能还没有很好地解释我的问题,一切都按照应有的方式声明,并且在 90% 的时间内一切正常。我已经编辑了我的第一篇文章,所以你可以理解