我第一次尝试创建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
答案 0 :(得分:0)
我不相信可以撤消通过VBA代码执行的操作。例如,如果我手动改写单元格中的值,则编辑&gt;撤消将允许我返回到先前的值。但是,如果我使用更改值的代码(Range(“a1”)=“New Value”),那么我就无法撤消。
您可能会考虑做的是在GenerateMarkerOnSheet代码中添加代码,该代码存储每次运行时受影响的单元格的地址或范围。您可以将地址/范围存储在隐藏的工作表或命名范围内。
然后你的ResetMarkerOnSheet例程只会改变存储的地址/范围的背景。
根据您的编码方式,您可以存储多个级别的“撤消”。