VBA: 定时保存Excel文件

2022-09-20 14:42:14 浏览数 (1)

文章背景:有一份文件的数据更新比较频繁,而其他电脑需要随时查看该文件的最新数据,因此,需要经常保存该文件。

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的代码框内,输入如下代码:

代码语言:javascript复制
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的代码框内,输入如下代码:

代码语言:javascript复制
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)

0 人点赞