我想监视一个值并在满足某些条件时收到电子邮件通知。我有一个像这样的宏:
Do While True
Worksheet.Calculate
If Value > 10 Then
SendEmail
End If
Sleep 60*CLng(1000)
Loop
但是,当我运行它时,它会阻塞整个程序,并且如果我尝试执行任何操作,它就会变得无响应。
无论如何,有没有办法实现这一点,但让它在后台运行,或者至少不会使程序崩溃?
我之前所做的是使用 VBScript 打开一个不可见的电子表格,VBScript 在后台连续运行,监视状况并且工作正常,但我的客户确实想要一个 GUI,并将其包含在程序本身中。
有什么想法吗?
Use the 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
您可能希望将下一个计划的时间存储在全局变量中,以便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
然后,您可以在预定时间之间继续使用 Excel。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)