5

我有一组代码,其中包含:

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
4

2 回答 2

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

请注意,OnTimesub 末尾的语句再次递归调用 sub。这里有更多信息。

于 2013-04-18T04:07:39.603 回答
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 将代码置于中断模式。

于 2013-04-18T15:19:25.307 回答