楼主: 小鳄鱼a
11606 2

[问答] 执行完宏怎样恢复上一步 [推广有奖]

  • 6关注
  • 10粉丝

已卖:280份资源

学科带头人

3%

还不是VIP/贵宾

-

威望
0
论坛币
125 个
通用积分
0.0040
学术水平
40 点
热心指数
45 点
信用等级
43 点
经验
32801 点
帖子
1185
精华
0
在线时间
1539 小时
注册时间
2009-7-16
最后登录
2018-10-5

楼主
小鳄鱼a 发表于 2014-10-27 15:13:32 |AI写论文
10论坛币
是不是不能恢复上一步

最佳答案

芐雨 查看完整内容

不能,不过可以曲线救国,如:你的操作是对工作表A,可以在执行代码前,先复制这个工作表A为工作表B。执行完,想恢复的时候,删除工作表A,直接使用工作表B就行了。工作簿,同理。

本帖被以下文库推荐

沙发
芐雨 发表于 2014-10-27 15:13:33
不能,不过可以曲线救国,如:你的操作是对工作表A,可以在执行代码前,先复制这个工作表A为工作表B。执行完,想恢复的时候,删除工作表A,直接使用工作表B就行了。工作簿,同理。
已有 1 人评分经验 论坛币 收起 理由
客初 + 20 + 20 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20   查看全部评分

藤椅
matlab-007 发表于 2016-6-15 19:57:41
用VBA可以恢复,但不能通过Excel内置的功能自动实现。您可以使用VBA代码记录下运行宏程序前单元格或单元格区域原先的内容,在“撤销”命令中调用以恢复程序运行前的状态。
      您可以使用Application对象的OnUndo方法作为宏程序结束前的最后一个代码,该方法允许您指定出现在“撤销”菜单项中的文本以及点击该文本后所运行的过程。如下面的代码所示:
Application.Onundo “撤销最后一个宏”,”恢复宏程序”
为说明上述方法,下面列出了一个完整的示例。示例的完整代码以及代码说明如下:
‘**************************************************
Type RangeCellInfo '自定义类型存储宏运行所作出的改变
    CellContent As Variant
    CellAddress As String
End TypePublic OrgWB As Workbook
Public OrgWS As Worksheet
Public OrgCells() As RangeCellInfo
‘**************************************************
Sub EditRange()
  ' 在所有被选取的单元格中插入X
  Dim i As Integer, cl As Range
  If TypeName(Selection) <> "Range" Then Exit Sub
  Application.ScreenUpdating = False
  ReDim OrgCells(Selection.Count)
  Set OrgWB = ActiveWorkbook
  Set OrgWS = ActiveSheet
  i = 1
  ‘记录下宏程序对工作表作出改变前的状态
  For Each cl In Selection
    OrgCells(i).CellContent = cl.Formula
    OrgCells(i).CellAddress = cl.Address
    i = i + 1
  Next cl
  ‘在所选单元格中填允X
  Selection.Formula = "X"
  ‘指定在“撤销”菜单项中的文字及选择该命令时所执行的宏程序
  Application.OnUndo "撤销最后运行的宏过程操作", "UndoEditRange"
End Sub
‘**************************************************
‘恢复工作表原先的状态
Sub UndoEditRange()
  Dim i As Integer
  Application.ScreenUpdating = False
  On Error GoTo NoWBorWS
  OrgWB.Activate
  OrgWS.Activate
  On Error GoTo 0
  '恢复宏运行所作的改变
  For i = 1 To UBound(OrgCells)
      Range(OrgCells(i).CellAddress).Formula = OrgCells(i).CellContent
  Next i
  Set OrgWB = Nothing
  Set OrgWS = Nothing
  Erase OrgCells
NoWBorWS:
End Sub

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-6 19:43