乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > 我有一段高手给的<em>EXCEL</em> <em>自动保存</em>

我有一段高手给的<em>EXCEL</em> <em>自动保存</em>

作者:乔山办公网日期:

返回目录:excel表格制作


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim j%
For j = 1 To Sheets.Count
Sheets(j).Select
ActiveSheet.Protect Password:="1234"
Next
ThisWorkbook.Save
End Sub

这个问题很深刻,我以为可以实现,但高手有高手的苦衷啊~

excel是这样的,自动保存后有个副本,副本在通过自身的VBA运行保存为下一个副本,也就是说下一个副本是通过上一个副本的VBA建立的,而不是通过初始的那个文件,所以高手使用的是ThisWorkbook.SaveCopyAs这个函数,这个函数将指定工作簿的副本保存到文件,但不修改内存中的打开工作簿,就是说每次都是将初始工作簿另存文件后,ThisWorkbook仍然为初始工作簿,而不是另存后的工作薄。但这个函数有个缺陷就是只能选择保存的文件名,而不能选择保存的文件类型,我试了下,将文件名直接写为"D:\20140109.xls"这种形式是没有问题的,所以将代码稍微改了下,保存后的xls是可以打开,但在代码运行过程中不要打开,在运行过程中打开,则ThisWorkbook变为打开的工作薄,代码运行就会出现你说的问题:e799bee5baa6e997aee7ad94e58685e5aeb9364

Option Explicit
Sub Auto_Open()
    
    Application.OnTime Time + TimeValue("00:00:05"), "OnTimeSave", , True  '设置自动保存开始
End Sub
Sub Auto_Close()
On Error Resume Next
    Application.OnTime Time, "AutoSave", , False
End Sub
Sub OnTimeSave()
    'Private Const interval As Long = 5 / 60 '自动保存的间隔时间,以分钟为单位
    
    Dim today As String
    Dim path As String, fileName As String, fileExt As String     '将这三个变量定义为模块级变量,不需要每次执行autosave过程时,都要取一次值。
    Dim saveAs  As String   '保存为新的文件名
    Dim b As Boolean
    today = Application.WorksheetFunction.Text(Date, "YYYYMMDD")    '日期格式为:4位年2位月份2位日期,
                                                                    '修改"YYYYMMDD",可以得到不同的日期格式,但是要注意 / 在windows系统是不允许作为文件名的
    path = ThisWorkbook.path & "\"    '默认是工作簿所在的路径,可以指定一个文件夹作为备份的文件夹
    fileExt = ".xls" '工作簿文件扩展名(比如:test.xls,此变量的值将是 .xls)
    fileName = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - Len(fileExt))  '工作簿文件名,不含扩展名 (比如:test.xls,此变量的值将是 test)
    saveAs = path & fileName & "-" & today & fileExt   '新的文件名
    
    Debug.Print Time, saveAs & Excel.XlFileFormat.xlHtml
   
    b = Application.DisplayAlerts           '保存原来的Application.DisplayAlerts状态,以便恢复用。
    Application.DisplayAlerts = False       '不提示覆盖保存
    
    On Error Resume Next
    ThisWorkbook.SaveCopyAs saveAs
    If Err Then Err.Clear                   '如过文件打开了则会发生错误,无视错误,继续。
    
    Application.DisplayAlerts = b           '恢复Application.DisplayAlerts之前的状态。
    Application.OnTime Time + TimeValue("00:00:05"), "OnTimeSave", , True   '设置下一个间隔时间自动保存
End Sub

对于一些重要文档,可以利用Excel的宏实现文档一编辑就自动保存,打开Excel后按Alt+F11打开VBAProject,在需要保护的表里写入如下代码:
Private Sub Worksheet_ Change(ByVal Target As Range)
ThisWorkbook.Save
End Sub

保存,关闭,设置允许宏运行,这样保护的工作表只要一进行编辑就会自动保存。

如果只是保存,在宏代码里,只写ThisWorkbook.Save就可以了

先添加模块,copy输入:


Sub AutoSave()
    Dim Start, PauseTime
    Do While True
        PauseTime = 3600    '3600秒,1小时,根据需要换其他时间
        Start = Timer
        Do While Timer < Start + PauseTime
            DoEvents
        Loop
        ActiveWorkbook.Save
    Loop
        
End Sub

在ThisWorkbook的Open事件中的代码:

Private Sub Workbook_Open()
  Application.OnTime Now + TimeValue("00:00:10"), "AutoSave"    '打开后稍等片刻,开始进入自动判断时间,时间达到要求后保存,并一直循环直到关闭
End Sub

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网