0

我有一个工作簿,里面有三个 excel 表。我希望用户能够从第三张表中复制数据,这是第二张表中的计算结果。但是,我正在使用的代码

'The code for the Macro
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim col As String
Dim msg As String
col = Split(Target.Address(1, 0), "AOS")(0)
'Permet d'éviter les modifications des modifications manuelles des cellules calculées automatiquement
If Intersect(Target, Sheets("AOS").Range("A3:AP100")) Is Nothing Then Exit Sub

'We're going to make a change, so turn this off
'so that macro doesn't get called infinitely
Sheets("AOS").Application.EnableEvents = False

Sheets("AOS").Application.Undo
MsgBox "Can't touch this!", vbCritical + vbOKOnly, "Error !!!!!"
Sheets("AOS").Application.EnableEvents = True

它也是撤消在第二张表中所做的更改。似乎 Sheets("AOS").Application.Undo 没有按应有的方式工作。

有什么建议么..?

4

2 回答 2

0

您正在使用该SelectionChange事件,您应该使用该Change事件。SelectionChange每次更改选择时都会发生,因此当您使用 Undo 时,它会撤消上一个可逆操作,这可能发生在不同的工作表中。

于 2013-06-26T13:45:10.877 回答
0

来自 MSDN:

此方法仅撤消用户在运行宏之前执行的最后一个操作,并且它必须是宏中的第一行。它不能用于撤消 Visual Basic 命令。

于 2013-06-26T13:51:40.333 回答