DoEvents无法在Excel

时间:2018-04-19 12:28:13

标签: excel vba excel-vba

我正在尝试在excel中创建一个自动保存功能,因为当前的微软不会为本地文件说话。 这是我提出的VB。但仍然只有宏运行,没有给窗口任何控制。 DoEvents似乎不起作用。

Sub Auto_save()   
    Do While 1 < 2    
        ActiveWorkbook.Save
        Application.Wait (Now + TimeValue("0:00:05"))
        DoEvents
    Loop

End Sub

我正在使用Exel 365 Pro Plus 如果有人可以帮助我,真的很好。 非常感谢!

3 个答案:

答案 0 :(得分:2)

您要求VBA等待5秒,这将在此期间冻结Excel,并且只有在method_NOT_toSelect()完成后,Wait才会触发。

经常看到的一个解决方案是使用包含DoEvents的循环来实现自己的wait - 函数,例如在https://stackoverflow.com/a/21405463/7599798建议(从那里复制)

DoEvents

但是,我认为这不是一个很好的解决方案,因为它可以让您的CPU保持忙碌状态。另一种方法是使用Private Sub delay(seconds As Long) Dim endTime As Date endTime = DateAdd("s", seconds, Now()) Do While Now() < endTime DoEvents Loop End Sub 函数:

OnTime

旁注:您不应该使用Sub SaveMe() ActiveWorkbook.Save Application.OnTime Now + TimeValue("00:00:05"), "SaveMe" End Sub ,因为焦点可能很容易更改为不同的工作簿,在这种情况下,您将无法保存您期望的工作簿。< / p>

答案 1 :(得分:2)

您不需要DoEvents。从How do I show a running clock in Excel?

复制和编辑的示例代码
Dim TimerActive As Boolean
Sub StartTimer()
    Start_Timer
End Sub
Private Sub Start_Timer()
    TimerActive = True
    Application.OnTime Now() + TimeValue("00:00:05"), "Timer"
End Sub
Private Sub Stop_Timer()
    TimerActive = False
End Sub
Private Sub Timer()
    If TimerActive Then
        ThisWorkbook.Save
        ThisWorkbook.Sheets(1).Range("A1").Value = "Last saved by : " & Application.UserName & " on " & Format(Now(), "dd-mm-yy hh:mm:ss")
        Application.OnTime Now() + TimeValue("00:00:05"), "Timer"
    End If
End Sub

答案 2 :(得分:0)

从Excel 365/2016开始,VBA代码中需要两个连续的DoEvents命令来更新动态图。奇怪但真实。每次都能工作。