gpt4 book ai didi

excel - 按时间间隔运行宏的代码?

转载 作者:行者123 更新时间:2023-12-02 14:08:21 24 4
gpt4 key购买 nike

如何设置宏在特定时间运行,然后以设定的时间间隔运行?我希望它在每小时的顶部运行,因此我想在上午 07:00 启动它,然后在我希望它再次运行后每小时运行一次。这是代码:

Sub Refresh_All()
'
' Refresh_All Macro
'
' Keyboard Shortcut: Ctrl+Y
'
ChDir "Q:\Quality Control"
Workbooks.Open Filename:= _
"Q:\Quality Control\Internal Failure Log - Variable Month.xlsm"
Dim endTime As Date
endTime = DateAdd("s", 10, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWorkbook.RefreshAll
endTime = DateAdd("s", 10, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWorkbook.Save
endTime = DateAdd("s", 5, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWindow.Close
ChDir "Q:\Reports"
Workbooks.Open Filename:= _
"Q:\Reports\Finished-Transfer Report-variable month.xlsm"
endTime = DateAdd("s", 10, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWorkbook.RefreshAll
endTime = DateAdd("s", 10, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWorkbook.Save
endTime = DateAdd("s", 5, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWindow.Close
ActiveWorkbook.RefreshAll
endTime = DateAdd("s", 10, Now())
Do While Now() < endTime
DoEvents
Loop
ActiveWorkbook.Save
End Sub

最佳答案

Lumigraphics提出了关于内存使用的一个很好的观点,应该考虑这一点。为了学习的目的,我将提出一个替代解决方案,它不需要任务调度程序,并且可以完全在显示工作簿中工作。

在 VB 编辑器中,添加这个新子例程

Public Sub RefreshDataEachHour()

Application.OnTime Now + TimeValue("01:00:00"), "Refresh_All"

End Sub

并将以下行添加到 Refresh_All 例程的末尾

调用 RefreshDataEachHour

Refresh_All 例程第一次运行时,它将调用这个新过程,该过程将等待一个小时,然后调用 Refresh_All。在 Refresh_All 结束时,它再次返回到此存储过程,该过程将再次等待一个小时,然后调用 Refresh_All 等。这将重复,直到退出 Excel 应用程序。

下面的这部分超出了您的问题范围,但我认为无论如何提及都很重要。

基本上,Application.OnTime 安排任务在将来的某个时间运行。您可能希望在某个时间点结束此计划任务。为此,您必须使用参数 Schedule:=False 调用 Application.OnTime 方法,并且必须传入您使用第一个 计划该过程的确切时间。 >Application.OnTime 调用。

要处理这种情况,请声明一个全局变量(在所有子例程之外)并将该变量传递到一个将取消任务的新子例程中。

例如,您可以声明

公共(public) RunWhen 作为日期

然后您可以按如下方式修改上述过程:

Public Sub RefreshDataEachHour()

RunWhen = Now + TimeValue("01:00:00")
Application.OnTime EarliestTime:=RunWhen,Procedure:="Refresh_All",Schedule:=True

End Sub

然后您可以添加另一个子例程来处理任务的取消,如下所示:

Public Sub CancelRefresh()

Application.OnTime EarliestTime:=RunWhen, Procedure:="Refresh_All", Schedule:=False

End Sub

每当您使用Call CancelRefresh时,应该从队列中删除您的过程。

关于excel - 按时间间隔运行宏的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29782256/

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