Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 10249|回复: 7

[VBA] excel-vba应用示例之撤销宏所执行的操作

[复制链接]
发表于 2011-8-25 23:44 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2012-7-5 23:34 编辑

转自:http://hi.baidu.com/vba123/blog/item/3d1fb950789067628535241e.html









可以撤销宏所执行的操作吗?
解答:可以,但不能通过Excel内置的功能自动实现。您可以使用VBA代码记录下运行宏程序前单元格或单元格区域原先的内容,在“撤销”命令中调用以恢复程序运行前的状态。
您可以使用Application对象的OnUndo方法作为宏程序结束前的最后一个代码,该方法允许您指定出现在“撤销”菜单项中的文本以及点击该文本后所运行的过程。如下面的代码所示:
  1. Type RangeCellInfo    '自定义类型存储宏运行所作出的改变
  2.     CellContent As Variant
  3.     CellAddress As String
  4. End Type
  5. Public OrgWB As Workbook
  6. Public OrgWS As Worksheet
  7. Public OrgCells() As RangeCellInfo
  8. '**************************************************
  9. Sub EditRange()
  10. ' 在所有被选取的单元格中插入X
  11.     Dim i As Integer, cl As Range
  12.     If TypeName(Selection) <> "Range" Then Exit Sub
  13.     Application.ScreenUpdating = False
  14.     ReDim OrgCells(Selection.Count)
  15.     Set OrgWB = ActiveWorkbook
  16.     Set OrgWS = ActiveSheet
  17.     i = 1
  18.     '记录下宏程序对工作表作出改变前的状态
  19.     For Each cl In Selection
  20.         OrgCells(i).CellContent = cl.Formula
  21.         OrgCells(i).CellAddress = cl.Address
  22.         i = i + 1
  23.     Next cl
  24.     '在所选单元格中填允X
  25.     Selection.Formula = "X"
  26.     '指定在“撤销”菜单项中的文字及选择该命令时所执行的宏程序
  27.     Application.OnUndo "撤销最后运行的宏过程操作", "UndoEditRange"
  28. End Sub
  29. '**************************************************
  30. '恢复工作表原先的状态
  31. Sub UndoEditRange()
  32.     Dim i As Integer
  33.     Application.ScreenUpdating = False
  34.     On Error GoTo NoWBorWS
  35.     OrgWB.Activate
  36.     OrgWS.Activate
  37.     On Error GoTo 0
  38.     '恢复宏运行所作的改变
  39.     For i = 1 To UBound(OrgCells)
  40.         Range(OrgCells(i).CellAddress).Formula = OrgCells(i).CellContent
  41.     Next i
  42.     Set OrgWB = Nothing
  43.     Set OrgWS = Nothing
  44.     Erase OrgCells
  45. NoWBorWS:
  46. End Sub
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +3 收起 理由
EXCEL-YQ + 3 精品文章

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-8-26 00:03 | 显示全部楼层
好东西,感谢分享!

点评

我也是搜来的,呵呵呵  发表于 2011-8-26 00:06
回复

使用道具 举报

发表于 2011-8-26 20:01 | 显示全部楼层
回复

使用道具 举报

发表于 2011-8-27 21:43 | 显示全部楼层
我是来学习学习 不是路过的
回复

使用道具 举报

发表于 2011-9-30 16:44 | 显示全部楼层
学习学习
回复

使用道具 举报

发表于 2012-3-7 09:20 | 显示全部楼层
题目不要取的这么大,原来只是恢复你自己写的宏!晕!

评分

参与人数 1 +6 金币 +6 收起 理由
爱疯 + 6 + 6 因是转载,故没修改作者标题,感谢提醒

查看全部评分

回复

使用道具 举报

发表于 2012-5-25 05:33 | 显示全部楼层
先下载下来,慢慢学习
回复

使用道具 举报

发表于 2017-5-21 23:37 | 显示全部楼层
本帖最后由 wzzxx 于 2017-5-21 23:39 编辑
cuirencui 发表于 2012-5-25 05:33
先下载下来,慢慢学习

我有更好的办法:再次打开这个文件。
如:Sub 撤销()
Application.ScreenUpdating = False
Application.DisplayAlerts = Flase
Workbooks.Open ThisWorkbook.Path & "\" & "文件名.xls"
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 06:07 , Processed in 0.735703 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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