我正在尝试在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 如果有人可以帮助我,真的很好。 非常感谢!
答案 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命令来更新动态图。奇怪但真实。每次都能工作。