Excel 如何在VBA中将参数传递给撤消处理程序

Excel 如何在VBA中将参数传递给撤消处理程序,excel,arguments,vba,Excel,Arguments,Vba,我第一次尝试创建Excel VBA 下面的宏实质上改变了单元格区域内部的背景 GenerateMarkerOnSheet将内饰设置为黑色。 ResetMarkerOnSheet用于在撤消时回滚上述更改 是否可以通过Application.OnUndo将上一个内部作为参数传递给撤消处理程序(ResetMarkerOnSheet) 如果是的话,我应该怎么做 Sub GenerateMarkerOnSheet() ' ' GenerateMarkerOnSheet Macro ' Macro reco

我第一次尝试创建Excel VBA

下面的宏实质上改变了单元格区域内部的背景

GenerateMarkerOnSheet将内饰设置为黑色。 ResetMarkerOnSheet用于在撤消时回滚上述更改

是否可以通过Application.OnUndo将上一个内部作为参数传递给撤消处理程序(ResetMarkerOnSheet)

如果是的话,我应该怎么做

Sub GenerateMarkerOnSheet()
'
' GenerateMarkerOnSheet Macro
' Macro recorded 29/01/2010 by Everyone
'

'

StartIndex = 99

RangeGap = 100

StartCell = "A"

EndCell = "BU"

PreviousBackground = 1

Do While StartIndex < 65536
    For Each c In Worksheets(ActiveSheet.Name).Range(StartCell & StartIndex & ":" & EndCell & StartIndex)
        If PreviousBackground = 1 Then
            PreviousBackground = c.Interior.ColorIndex
        End If
        c.Interior.Color = RGB(0, 0, 0)
    Next
    StartIndex = StartIndex + RangeGap
Loop
' How to pass PreviousBackground to the call below
Application.OnUndo "Undoing", "ResetMarkerOnSheet"


End Sub


Sub ResetMarkerOnSheet()
'
' ResetMarkerOnSheet Macro
' Macro recorded 29/01/2010 by Everyone
'

'

StartIndex = 99

RangeGap = 100

StartCell = "A"

EndCell = "BU"

Do While StartIndex < 65536
    For Each c In Worksheets(ActiveSheet.Name).Range(StartCell & StartIndex & ":" & EndCell & StartIndex)
        c.Interior.ColorIndex = PreviousBackground
    Next
    StartIndex = StartIndex + RangeGap
Loop


End Sub
Sub-GenerateMarkerOnSheet()
'
'GenerateMarkerOnSheet宏
“所有人于2010年1月29日录制的宏
'
'
StartIndex=99
范围差距=100
StartCell=“A”
EndCell=“BU”
PreviousBackground=1
开始索引<65536时执行此操作
对于工作表(ActiveSheet.Name).Range(StartCell&StartIndex&“:”&EndCell&StartIndex)中的每个c
如果PreviousBackground=1,则
PreviousBackground=c.Interior.ColorIndex
如果结束
c、 内饰颜色=RGB(0,0,0)
下一个
StartIndex=StartIndex+量程间隙
环
'如何将PreviousBackground传递给下面的呼叫
Application.ondo“撤消”、“重置标记表”
端接头
子表()
'
'ResetMarkerOnSheet宏
“所有人于2010年1月29日录制的宏
'
'
StartIndex=99
范围差距=100
StartCell=“A”
EndCell=“BU”
开始索引<65536时执行此操作
对于工作表(ActiveSheet.Name).Range(StartCell&StartIndex&“:”&EndCell&StartIndex)中的每个c
c、 Interior.ColorIndex=以前的背景
下一个
StartIndex=StartIndex+量程间隙
环
端接头

我认为不可能撤消通过VBA代码执行的操作。例如,如果我在单元格中手动重新键入一个值,则“编辑>撤消”将允许我返回到上一个值。但是,如果使用更改值的代码(范围(“a1”)=“新值”),则无法撤消

您可以考虑将代码添加到您的EngaseMARKONELAP代码中,该代码存储每次运行时受影响的单元格的地址或范围。您可以将地址/范围存储在隐藏的工作表或命名的范围中

然后,您的ResetMarkerOnSheet例程只需更改存储的地址/范围的背景


根据您的编码方式,您可以存储多个级别的“撤销”。

谢谢,但也可以从“Application.OnUndo”提供撤销处理程序。不过,使用隐藏的工作表是个好主意。我要试一试!