Excel(VBA)高手进来帮忙!

来源:百度知道 编辑:UC知道 时间:2024/09/24 06:28:24
大家都知道在Access里面删除某一行数据的时候会出现什么提示吧?它会提示你是否删除,同时在视图上先删除这一行数据。但是如果你选择“否”,它可以给你还原回来——就是这个功能!

我想在Excel中实现这一功能。照道理来说不难,先在Worksheet_SelectionChange过程中判断selection.cells.count,如果selection.cells.count > 1 ,那就整行把它复制下来——问题就在这里,复制的时候如果使用selection.copy,我发现它copy到的地方是系统公共剪贴板,这样我觉得不安全。我的想法是自定义一个数据类型来存储这行数据,但是我不知道应该用什么类型的变量来存储 (╯﹏╰)b..........

望大虾们解惑!
qad1103兄台的想法很好!但是能否说清楚一点?用录制宏的方法无法录下Ctrl+Z的撤销行为。那么要用什么代码来实现?

根据Excel删除后会选择下方同样的行数的特点,先判断Selection的列数是否等于256,如果不等于说明SheetChange的不是整行,退出。
如果是整行则先恢复已删除的行,然后将它隐藏,再用对话框提示是否删除。
不确认删除的话恢复隐藏的行,退出
确认删除的话则用VBA语句删除,退出
一进入Worksheet_Change事件响应程序,首先要禁用Excel的事件响应,退出时再恢复
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False '禁用Excel的事件响应
If Target.Columns.Count <> 256 Then GoTo q '先判断Selection的列数是否等于256,如果不等于说明SheetChange的不是整行,退出。
Application.Undo '先恢复已删除的行
R = Selection.Row & ":" & Selection.Row + Selection.Rows.Count - 1
Rows(R).Hidden = True '隐藏恢复的行
If MsgBox("是否真的要删除整行?", vbYesNo) = vbYes Then
Rows(R).Delete '删除恢复的行
Else
Rows(R).Hidden = False '恢复隐藏的行
End If
q:
Application.EnableEvents = True '恢复Excel的事件响应
End Sub

删除后,如果点了否,你用代码做一步ctrl+Y不就可以了,没必要复制出来

string 类型变量

直接copy到excel表中暂时存放,这样最简单,