В настоящее время у меня есть макросетка с поддержкой макросов, которая выполняет различные функции, включая обновление, создание и удаление сотен строк. Если по какой-либо причине одна из этих функций переходит в haywire и удаляет информацию, предназначенную для хранения, я хотел бы реализовать кнопку «Отменить», которая восстанавливает версию этой таблицы, которая была просто изменена макросом.Кнопка «Отменить» в VBA, которая восстанавливает всю версию рабочего листа
Я предполагаю, что это будет выглядеть следующим образом:
Public InstanceOfWorksheet As Range
Sub Button_Click()
InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this
'Macro functionality here
CurrentWorksheet.Update() 'Worksheet has now been updated
End Sub
Sub Button2_Click()
InstanceOfWorksheet = CurrentWorksheet.UsedRange 'Or something like this
'Second Macro functionality here
CurrentWorksheet.Update() 'Worksheet has now been updated
End Sub
Sub UndoLastMacro_Click()
CurrentWorksheet = InstanceOfWorksheet
End Sub
Таким образом, в этом случае, когда вы активировали команду UndoLastMacro, вы бы эффективно «восстановить» версию рабочего листа вы имели до последнего Macro называется.
Мой вопрос: какой тип переменной должен быть InstanceOfWorksheet
, и каким будет самый простой способ скопировать содержимое InstanceOfWorksheet
в текущий рабочий лист?
Заранее благодарен! :)
Вам нужно больше, чем одну переменные для этого, переменного диапазона и переменного массив с типом данными 'Variant' для хранения значений целевого диапазона. Это предполагает, что ваши изменения относятся только к значениям. Если формулы, форматирование и т. Д. Также изменены, это намного сложнее. – Miqi180
С другой стороны, более простой и безопасный подход состоял бы в том, чтобы сделать временную копию рабочего листа, который удаляется, если при внесении изменений ошибок не возникает. Используйте 'On error resume next' и удалите временную копию, если в конце' Err.Number = 0'. – Miqi180
Возможно, вам лучше создать новый лист для хранения '.UsedRange.Formula'. VBA трудно отменить, если каждое изменение не регистрируется. Или просто сохраните копию рабочей книги в папку Temp? – PatricK