我有一组包含以下内容的代码:
Application.Wait (Now + TimeValue("4:00:00"))
这实际上暂停了从凌晨3点(当它完成运行代码时)到上午7点(应该恢复时)的四小时窗口的宏。代码基本上是无限循环。
我希望用户能够在此期间控制编辑某些单元格。我试过了
DoEvents
但是还没有找到保持宏运行的方法,但是在宏不做任何事情而是等待的时候,还为用户提供了控制权。
任何见解都将受到赞赏。谢谢!
编辑:
还有一个后续问题。我创建了这个宏来引用实际的宏“Production_Board”。我希望这个宏一直运行并尽可能频繁地刷新。通过使用goto startagain,它会尝试在宏开始之前再次启动宏,因为“ontime”延迟时间间隔。
我怎么能让子RunMacro再次启动宏“Production_Board”完成的第二个?
Sub RunMacro
startagain:
Dim hour As Integer
Dim OT As String
hour = 0
OT = "Empty"
hour = Sheets("Calculations").Range("DR1").Value
OT = Sheets("Black").Range("D4").Value
If OT = "Y" Then
If hour = 3 Or hour = 4 Then
Application.OnTime TimeValue("05:00:00"), "Aespire_Production_Board"
Else
Application.OnTime Now + TimeValue("00:00:30"), "Aespire_Production_Board"
End If
Else
If hour = 3 Or hour = 4 Or hour = 5 Or hour = 6 Then
Application.OnTime TimeValue("07:00:00"), "Aespire_Production_Board"
Else
Application.OnTime Now + TimeValue("00:00:30"), "Aespire_Production_Board"
End If
DoEvents
GoTo startagain
答案 0 :(得分:9)
而不是Wait
,请尝试OnTime
。要演示,请将其粘贴到普通模块中并运行Test
。活动工作表的范围A1将每五秒递增一次,您将能够在两者之间工作。如果您在五秒钟过后处于编辑模式,它也可以工作:
Sub test()
test2
End Sub
Sub test2()
ActiveSheet.Cells(1, 1).Value = ActiveSheet.Cells(1, 1).Value + 1
Application.OnTime Now + TimeValue("00:00:5"), "test2"
End Sub
请注意,sub末尾的OnTime
语句再次递归调用sub。 Here's更多信息。
答案 1 :(得分:1)
Sub mySub()
Do
If Time() >= #3:00:00 AM# And Time() <= #7:00:00 AM# Then
Aespire_Production_Board
End If
DoEvents
Loop
End Sub
一旦启动mySub(),它将无限期地运行。凌晨3点到7点之间,它将在每个循环中运行Aespire_Production_Board。它还允许用户进行交互。可以使用CTRL-Break将代码置于Break模式。