Cha*_*ton 5 excel vba excel-vba
我想监视一个值,并在满足某些条件时收到电子邮件通知.我有一个像这样的宏:
Do While True
Worksheet.Calculate
If Value > 10 Then
SendEmail
End If
Sleep 60*CLng(1000)
Loop
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它会堵塞整个程序,如果我尝试做任何事情,它将无法响应.
反正有没有完成这个,但让它在后台运行或至少没有崩溃程序?
我以前做的是使用VBScript打开一个不可见的电子表格,VBScript在后台持续运行,监控条件并运行良好,但我的客户真的想要一个GUI,并且它在程序本身.
有什么想法吗?
使用该Application.OnTime方法可以安排将在一分钟内运行的代码.
您的代码看起来像这样(未经测试):
Sub CreateNewSchedule()
Application.OnTime EarliestTime:=DateAdd("n", 1, Now), Procedure:="macro_name", Schedule:=True
End Sub
Sub macro_name()
If Value > 10 Then
SendEmail
Else
CreateNewSchedule
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
您可能希望将下一个计划的时间存储在全局变量中,以便Workbook_BeforeClose事件可以取消下一个计划.否则Excel将重新打开工作簿.
Public nextScheduledTime As Date
Sub CreateNewSchedule()
nextScheduledTime = DateAdd("n", 1, Now)
Application.OnTime EarliestTime:=nextScheduledTime , Procedure:="macro_name", Schedule:=True
End Sub
Sub macro_name()
If Value > 10 Then
SendEmail
Else
CreateNewSchedule
End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=nextScheduledTime, Procedure:="macro_name", Schedule:=False
End Sub
Run Code Online (Sandbox Code Playgroud)
然后,您可以在预定时间之间继续使用Excel.