gpt4 book ai didi

vba - 如何让VBA宏在后台持续运行?

转载 作者:行者123 更新时间:2023-12-02 07:27:00 27 4
gpt4 key购买 nike

我想监控一个值并在满足某些条件时收到电子邮件通知。我有一个像这样的宏:

Do While True

Worksheet.Calculate

If Value > 10 Then
SendEmail
End If

Sleep 60*CLng(1000)

Loop

但是,当我运行它时,它会阻塞整个程序,并且如果我尝试执行任何操作,它就会变得无响应。

是否有办法完成此任务,但让它在后台运行,或者至少不会使程序崩溃?

我之前所做的是使用 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

您可能希望将下一个计划的时间存储在全局变量中,以便 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。

关于vba - 如何让VBA宏在后台持续运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210921/

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