Отмена результатов сортировки
Модератор: Naeel Maqsudov
Как можно отменить действие (сортировку) после выполнение макроса? В данном случае я сортирую определенный диапозон на листе и хотелось бы иметь возможность отменять действие. Как можно запомнить положение дел до сортировки?
Вот сам код сортировки...
Sub SortRezult()
'Call SaveUndoInfo(Selection) - что-то вроде этого...
Range("C6:P115").Select
ActiveWindow.SmallScroll Down:=-105
Selection.Sort Key1:=Range("L6"), Order1:=xlAscending, Key2:=Range("J6") _
, Order2:=xlAscending, Key3:=Range("P6"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
ActiveWindow.SmallScroll Down:=-15
End Sub
Вот сам код сортировки...
Sub SortRezult()
'Call SaveUndoInfo(Selection) - что-то вроде этого...
Range("C6:P115").Select
ActiveWindow.SmallScroll Down:=-105
Selection.Sort Key1:=Range("L6"), Order1:=xlAscending, Key2:=Range("J6") _
, Order2:=xlAscending, Key3:=Range("P6"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
ActiveWindow.SmallScroll Down:=-15
End Sub
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Сорри, я не специалист в VBA, может скажу глупость. А что, нет возможности просто вызвать команду офиса Undo?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
После выполнения макроса к сожалению данная кнопка не активна..
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
отменить действие макроса - вообще большая проблема.
Как-то уже говорили на этом форуме.
ИМХО единственный выход - закрыть книгу без сохранения.
хотя....можно поробовать перед сортировкой сохранять где-то исходные данные
Как-то уже говорили на этом форуме.
ИМХО единственный выход - закрыть книгу без сохранения.
хотя....можно поробовать перед сортировкой сохранять где-то исходные данные
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
А нельзя перед Вашей сортировкой просто сохранить файл под временным именем. Затем, в случае необходимости вернуться к нему.
VictorM, да наверное так и сделаю, жалко что нет более легкого решения.
Сделал так
Application.OnUndo Text:="Отменить действия макроса", Procedure:="CancelMacro"
Private Sub CancelMacro()
ThisWorkbook.Close saveChanges:=False
End Sub
SAS888, данная возможность уже есть, просто хотелось более "эстетично" что ли..
VictorM, SAS888 спасиб
Но, если у кого нить есть еще решения, буду очень признателен!
Сделал так
Application.OnUndo Text:="Отменить действия макроса", Procedure:="CancelMacro"
Private Sub CancelMacro()
ThisWorkbook.Close saveChanges:=False
End Sub
SAS888, данная возможность уже есть, просто хотелось более "эстетично" что ли..
VictorM, SAS888 спасиб

Но, если у кого нить есть еще решения, буду очень признателен!
А кто принимает решение, оставлять результат сортировки или нет?
Если это решение зависит от причины, которую можно проконтролировать с помощью макроса, то целесообразно перед сортировкой сделать, например, копию этого листа (в этой же книге), а по результату контроля - оставлять новый лист, или вернуть копию.
Если это решение зависит от причины, которую можно проконтролировать с помощью макроса, то целесообразно перед сортировкой сделать, например, копию этого листа (в этой же книге), а по результату контроля - оставлять новый лист, или вернуть копию.
Решение принимает пользователь. В принципе получается так что иногда сортировка нужна только на время. Конечно выход без сохранения книги решает вопрос. но при этом мне пришлось отказаться от автоматического сохраниния книги при выходе (причин для автосохранения было много не буду перечислять). Да и пользоваться этой таблицей буду не я, и конечному пользователю будет слегка неудобно все время после сортировки заново запускать файл." писал(а):А кто принимает решение, оставлять результат сортировки или нет?
- VictorM
- Сообщения: 794
- Зарегистрирован: 23 окт 2006, 01:44
- Откуда: Lugansk, Ukraine
- Контактная информация:
значит все-так имеет смысл подумать о дополнительном листе, как говорил SAS888
это может решить проблему. Все же проще удалить ненужный лист,чем закрывать/открывать книгу
это может решить проблему. Все же проще удалить ненужный лист,чем закрывать/открывать книгу
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ну, Вам виднее. Хотя как раз задачу "сортировки на время" это временное копирование и решит.