我有一段高手给的EXCEL 自动保存的代码,如何让它保存时去掉VBA

代码如下,自动保存的副本打开又会再保存一个副本,所以想让保存的副本不要再带VBA了。或者能保存为其他格式如HTML类的也好,我自己修改半天搞不定。OptionExplic... 代码如下,自动保存的副本打开又会再保存一个副本,所以想让保存的副本不要再带VBA了。或者能保存为其他格式如HTML类的也好,我自己修改半天搞不定。

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 = ".htm" '工作簿文件扩展名(比如: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 & Excel.XlFileFormat.xlHtml
If Err Then Err.Clear '如过文件打开了则会发生错误,无视错误,继续。

Application.DisplayAlerts = b '恢复Application.DisplayAlerts之前的状态。
Application.OnTime Time + TimeValue("00:00:05"), "OnTimeSave", , True '设置下一个间隔时间自动保存
End Sub
展开
 我来答
jiaqi9266
推荐于2017-10-02 · TA获得超过514个赞
知道小有建树答主
回答量:346
采纳率:100%
帮助的人:385万
展开全部

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

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

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
追问
高手:
还是不行。
关闭初始文件后, 我打开另存的副本,副本仍然会再建1个副本
追答
恩,是的,在程序运行的过程中,副本不能打开的,副本一打开就会运行副本中的宏,你是想怎么样实现啊?
szleal
2014-01-08 · TA获得超过186个赞
知道答主
回答量:86
采纳率:0%
帮助的人:57.8万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式