ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 321|回复: 9

[分享] 由于execlVBA运行之后无法撤销,所以写了一个自动备份当前活动文档的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-8-7 18:01 | 显示全部楼层 |阅读模式
  1. Sub 备份当前文档()
  2. '    On Error Resume Next

  3.     Dim 当前文件地址, 当前文件名, 当前文件全名 As String
  4.     Dim 备份文件夹, 备份文件名, 备份文件全名 As String

  5.     ' 获取文件路径和文件名
  6.     当前文件全名 = ThisWorkbook.FullName
  7.     当前文件名 = ThisWorkbook.Name

  8.     ' 获取备份文件夹的完整路径
  9.     备份文件夹 = ThisWorkbook.Path & "\备份路径"
  10.     备份文件名 = Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5) & "_" & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".xlsm"
  11.     备份文件全名 = 备份文件夹 & 备份文件名

  12.     ' 创建备份文件夹(如果不存在)
  13.     If Dir(备份文件夹, vbDirectory) = "" Then
  14.         MkDir 备份文件夹
  15.     End If

  16.     ' 备份文件
  17. '    FileCopy filePath, backupFolder & Format(Now, "yyyy-mm-dd hh-mm-ss") & " " & fileName

  18.     Application.RecentFiles.Add Name:=当前文件全名
  19.     ActiveWorkbook.SaveAs fileName:=备份文件全名, AccessMode:=xlNoChange, ConflictResolution:=1, AddToMru:=-1
  20.    
  21.     Workbooks.Open 当前文件全名    '打开工作簿
  22.    
  23.    
  24.     Windows(备份文件名).Activate
  25.     ActiveWorkbook.Save         '保存当前工作簿
  26.     ThisWorkbook.Save           '保存当前代码所在的工作簿
  27.    
  28.     Windows(备份文件名).Close
  29.     Windows(当前文件全名).Activate
  30.     Windows(当前文件名).Activate
  31.    
  32.         ' 提示备份完成
  33.     MsgBox "备份完成!", vbInformation


  34. End Sub

  35. Sub Auto_Open()'打开文档时自动运行的宏
  36.     Call 备份当前文档
  37. End Sub

  38. '下面是一个示例:在 Workbook_Open 事件中,每隔三分钟自动运行一个名为 AutoRunMacro 的宏
  39. Private Sub Workbook_Open()
  40.     Call ScheduleMacro
  41. End Sub

  42. Sub ScheduleMacro()
  43.     Application.OnTime Now + TimeValue("00:03:00"), "AutoRunMacro"
  44. End Sub

  45. Sub AutoRunMacro()
  46.     Call 备份当前文档
  47. End Sub


  48. '要取消在三分钟后自动调用 AutoRunMacro 宏,请执行以下代码:

  49. Private Sub StopScheduledMacro()
  50.     Application.OnTime Now + TimeValue("00:03:00"), "AutoRunMacro", , False
  51. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2023-8-8 08:17 | 显示全部楼层
这种方式只是保留VBA操作前的状态,和原始的撤销还是有差别的

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-8-8 09:24 | 显示全部楼层
f8b1987 发表于 2023-8-8 08:17
这种方式只是保留VBA操作前的状态,和原始的撤销还是有差别的

是的,我的本意是每一次打开表格操作前都先保存备份一下

TA的精华主题

TA的得分主题

发表于 2023-12-1 07:04 来自手机 | 显示全部楼层
我一般是运行后如果没有达到预期,就不保存关闭。对付vba不能撤销,我能做到的就是vba尽量不要出错!所以异常处理代码有时候比功能处理代码还要多得多。

TA的精华主题

TA的得分主题

发表于 2023-12-1 07:11 来自手机 | 显示全部楼层
zaojiashi75 发表于 2023-12-1 07:04
我一般是运行后如果没有达到预期,就不保存关闭。对付vba不能撤销,我能做到的就是vba尽量不要出错!所以异 ...

有时候进行了很多操作再运行vba,如果不保存关闭会丢失掉之前的非vba操作。为避免出现这种情况,在vba代码前加一句save当前工作簿。

楼主的代码很不错,保存和打开文件思路很清晰。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-12-1 08:52 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zaojiashi75 发表于 2023-12-1 07:11
有时候进行了很多操作再运行vba,如果不保存关闭会丢失掉之前的非vba操作。为避免出现这种情况,在vba代 ...

谢谢评价。

TA的精华主题

TA的得分主题

发表于 2024-1-30 10:19 | 显示全部楼层
对于影响比较大的,我直接在程序界面做了一个撤销按钮,撤销上一步操作影响。不过确实有点麻烦,每个小功能都要搞个撤销。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-30 15:05 | 显示全部楼层
Enocheasty 发表于 2024-1-30 10:19
对于影响比较大的,我直接在程序界面做了一个撤销按钮,撤销上一步操作影响。不过确实有点麻烦,每个小功能 ...

因为按Ctrl+z无法撤销,我以为是撤销不了宏的操作的,没想到可以用按钮撤销

TA的精华主题

TA的得分主题

发表于 2024-1-30 16:34 | 显示全部楼层
过客fppt 发表于 2024-1-30 15:05
因为按Ctrl+z无法撤销,我以为是撤销不了宏的操作的,没想到可以用按钮撤销

哈哈,我的表达不清楚,是Excel编程操作是通过系统无法撤销的。我的撤销按钮的意思,我自己写了撤销的程序。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-30 16:36 来自手机 | 显示全部楼层
Enocheasty 发表于 2024-1-30 16:34
哈哈,我的表达不清楚,是Excel编程操作是通过系统无法撤销的。我的撤销按钮的意思,我自己写了撤销的程 ...

原来如此,好厉害
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 23:23 , Processed in 0.037356 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表