的DoEvents,等待,和编辑(DoEvents, Waiting, and Editing)

2019-08-31 10:38发布

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

Application.Wait (Now + TimeValue("4:00:00"))

这基本上是暂停,等待四个小时的窗口宏从凌晨3点至7点(当它共完成运行代码)(当它应该恢复)。 该代码是在本质上是一个无限循环。

我希望用户能够在这段时间来编辑某些细胞具有控制权。 我试过了

DoEvents

但还没有找到保持宏观运行,但在这段时间提供控制权交给用户时,宏做什么,但等待的方式。

任何有识之士将不胜感激。 谢谢!

编辑:

还有一个后续问题。 我创造了这个宏引​​用实际宏“Production_Board”。 我想这个宏运行所有的时间和经常刷新的可能。 通过使用goto语句startagain,它会尝试启动启动前再次宏已经由于在“工作时间”延迟间隔甚至开始宏。

我如何才能让子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

Answer 1:

而不是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

需要注意的是OnTime在子结束语句调用子再次递归。 这里有一些更多的信息。



Answer 2:

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-歇投入休息方式。



文章来源: DoEvents, Waiting, and Editing