Страницы: 1
RSS
Процедура, вызванная из Application.OnUndo повторно не устанавливает .OnUndo, так и должно быть?
 
Коллеги, добрый день.
Столкнулся со следующей проблемой, не могу понять - это "баг или фича"...
На листе есть некий макрос, который изменяет значение ячейки. Соответственно, после его применения история затирается, и приходится использовать Application.onUndo для вызова макроса, возвращающего все к исходному состоянию.
Код
Sub makeSomeAction()
    Sheets(1).Range("A1").Value = Sheets(1).Range("A1").Value + 1
    Application.onUndo Text:="Revert", Procedure:="revertAction"
End Sub

Public Sub revertAction()
    Sheets(1).Range("A1").Value = Sheets(1).Range("A1").Value - 1
End Sub
Все происходит так как запланировано, ячейка изменяет значение, при отмене вызывается макрос отмены. Отмена отрабатывает как должна, к предыдущему состоянию приводит.
Т.к. действие основного макроса может быть выполнено несколько раз, хотелось сделать отмену тоже повторяемой. Т.е. после отмены действия, заново назначить макрос revertAction на кнопку отмены. (Пример утрированный, в реальном проекте - логика при которой заново назначается revertAction проходит доп. проверки).
Но из тела revertAction установка .onUndo не происходит.
Код
Public Sub revertAction()
    Sheets("actionSheet").Range("A1").Value = Sheets(1).Range("A1").Value - 1
    ' Назначение .onUndo не происходит
    Application.onUndo Text:="Revert previous action", Procedure:="revertAction"
End Sub
Помогите пожалуйста разобраться - так задумано, чтобы отмена работала только один раз, или я что-то неправильно делаю?
Изменено: tolstak - 18.10.2017 12:04:36
In GoTo we trust
 
Код
Public Sub revertAction()
    Sheets("actionSheet").Range("A1").Value = Sheets(1).Range("A1").Value - 1 - затирает историю

Эта строчка затирает историю изменений, с этим ничего не поделать! Попрубуйте это.
Неизлечимых болезней нет, есть неизлечимые люди.
 
TheBestOfTheBest, спасибо, руководствовался идеями по ссылке при написании "боевого решения", где и возникла данная проблема :-)
Суть - ведение логов изменения в определенном диапазоне. Как и предложено в статье, реализовывал "теневую копию" данных при старте файла, лист лога с изменениями в формате время-ячейка-старое значение-новое значение.
Хотел дать пользователю возможность последовательной отмены залогированных действий.. Видимо, придется логи записывать не сразу на лист, а в переменную, чтобы "родная" история не затиралась.. А логи писать в файл только перед сохранением или закрытием файла...
Изменено: tolstak - 18.10.2017 12:41:45
In GoTo we trust
Страницы: 1
Читают тему
Наверх