如何将Argument传递给VBA中的Undo处理程序

时间:2010-01-30 05:31:53

标签: excel-vba arguments vba excel

我第一次尝试创建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

1 个答案:

答案 0 :(得分:0)

我不相信可以撤消通过VBA代码执行的操作。例如,如果我手动改写单元格中的值,则编辑&gt;撤消将允许我返回到先前的值。但是,如果我使用更改值的代码(Range(“a1”)=“New Value”),那么我就无法撤消。

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

然后你的ResetMarkerOnSheet例程只会改变存储的地址/范围的背景。

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