文章背景:有一份文件的数据更新比较频繁,而其他电脑需要随时查看该文件的最新数据,因此,需要经常保存该文件。
office365具有自动保存功能,当文件保存到 Microsoft 365 中的 Microsoft OneDrive 或 SharePoint 时,自动保存可用。
对于未开启自动保存
功能的情况,下面介绍如何通过VBA代码,实现文件的定时保存。这里用到的VBA方法是Application.OnTime
。
(1) Application.OnTime 方法
安排一个过程在将来的特定时间运行(既可以是具体指定的某个时间,也可以是指定的一段时间之后)。
语法
表达式.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
- EarliestTime 必选 Variant 希望此过程运行的时间。
- Procedure 必选 String 要运行的过程名。
- LatestTime 可选 Variant 过程开始运行的最晚时间。
- Schedule 可选 Variant 如果为 True,则预定一个新的 OnTime 过程。如果为 False,则清除先前设置的过程。默认值为 True。
(2)代码实现
在ThisWorkbook
的代码框内,输入如下代码:
Option Explicit
Private Sub Workbook_Open()
my_SaveTime = Now TimeValue("00:10:00")
On Error Resume Next
Application.OnTime my_SaveTime, "Save1"
On Error GoTo 0
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime my_SaveTime, "Save1", , False
On Error GoTo 0
End Sub
在模块1
的代码框内,输入如下代码:
Option Explicit
Public my_SaveTime As Date
Sub Save1()
Application.DisplayAlerts = False
ThisWorkbook.Save
Application.DisplayAlerts = True
my_SaveTime = Now TimeValue("00:10:00")
On Error Resume Next
Application.OnTime my_SaveTime, "Save1"
On Error GoTo 0
End Sub
以上代码要实现的功能是:打开工作簿时,开始定时保存,每10分钟自动保存一次文件。当关闭工作簿后,停止定时保存。
注意事项:关闭工作簿后,一定要解除OnTime
程序(参见Workbook_BeforeClose
的相应代码)。否则,即使关闭了工作簿,工作簿稍后也会被自动打开。
视频演示:http://mpvideo.qpic.cn/0bc37uacqaaammahhpuw2zqvb7odfd6qakaa.f10002.mp4?dis_k=1935eda0ec7649c2fb928a55e2d1531b&dis_t=1663656109&vid=wxv_2141637376266371073&format_id=10002&support_redirect=0&mmversion=false
参考资料:
[1] 如何启用“自动保存”(https://support.microsoft.com/zh-cn/office/如何启用-自动保存-dbd19b49-ff3a-48f5-8294-671e33a6712c)
[2] 我使用了OnTime函数 关闭文件后总是自动打开,求解决方案(https://club.excelhome.net/forum.php?mod=viewthread&tid=1547153&extra=page=1&page=1&)
[3] Application.ontime的用法,留着自己看(https://club.excelhome.net/thread-848141-1-1.html)
[4] Application.OnTime method(https://docs.microsoft.com/en-us/office/vba/api/excel.application.ontime)
[5] How to save an Excel file every, say one minute?(https://stackoverflow.com/questions/46524488/how-to-save-an-excel-file-every-say-one-minute)