Как передать Аргумент обработчику Undo в VBA - PullRequest
0 голосов
/ 30 января 2010

Моя первая попытка создания Excel VBA.

Макросы ниже существенно меняют фон внутри диапазона ячеек.

GenerateMarkerOnSheet устанавливает интерьер в черный цвет. ResetMarkerOnSheet предназначен для отката вышеуказанного изменения при отмене.

Можно ли передать предыдущий интерьер как аргумент обработчику отмены (ResetMarkerOnSheet) через Application.OnUndo?

Если это так, как мне поступить?

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 голосов
/ 02 февраля 2010

Я не верю, что можно отменить действия, которые были выполнены с помощью кода VBA. Например, если я вручную переопределю значение в ячейке, то Edit> Undo позволит мне вернуться к предыдущему значению. Однако, если я использую код, который изменяет значение (Range ("a1") = "New Value"), я не могу отменить.

Что вы могли бы подумать, это добавить код в код GenerateMarkerOnSheet, в котором будут храниться адреса или диапазоны затронутых ячеек при каждом запуске. Возможно, вы можете хранить адреса / диапазоны в скрытом листе или в именованном диапазоне.

Тогда ваша подпрограмма ResetMarkerOnSheet просто изменит фон для сохраненных адресов / диапазонов.

В зависимости от того, как вы его кодируете, вы можете хранить несколько уровней «Отменить».

...