Отмена результатов сортировки

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

Как можно отменить действие (сортировку) после выполнение макроса? В данном случае я сортирую определенный диапозон на листе и хотелось бы иметь возможность отменять действие. Как можно запомнить положение дел до сортировки?

Вот сам код сортировки...

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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

После выполнения макроса к сожалению данная кнопка не активна..
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

отменить действие макроса - вообще большая проблема.
Как-то уже говорили на этом форуме.
ИМХО единственный выход - закрыть книгу без сохранения.
хотя....можно поробовать перед сортировкой сохранять где-то исходные данные
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

А нельзя перед Вашей сортировкой просто сохранить файл под временным именем. Затем, в случае необходимости вернуться к нему.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

VictorM, да наверное так и сделаю, жалко что нет более легкого решения.
Сделал так
Application.OnUndo Text:="Отменить действия макроса", Procedure:="CancelMacro"

Private Sub CancelMacro()
ThisWorkbook.Close saveChanges:=False
End Sub

SAS888, данная возможность уже есть, просто хотелось более "эстетично" что ли..


VictorM, SAS888 спасиб ;)

Но, если у кого нить есть еще решения, буду очень признателен!
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

А кто принимает решение, оставлять результат сортировки или нет?
Если это решение зависит от причины, которую можно проконтролировать с помощью макроса, то целесообразно перед сортировкой сделать, например, копию этого листа (в этой же книге), а по результату контроля - оставлять новый лист, или вернуть копию.
Аватара пользователя
Mint86
Сообщения: 127
Зарегистрирован: 04 мар 2008, 11:47

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

значит все-так имеет смысл подумать о дополнительном листе, как говорил SAS888
это может решить проблему. Все же проще удалить ненужный лист,чем закрывать/открывать книгу
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Ну, Вам виднее. Хотя как раз задачу "сортировки на время" это временное копирование и решит.
Ответить