Страница 2 из 2

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

Добавлено: 15 июл 2008, 14:39
Mint86
Да наверное вы правы так и сделаю. Получается алгоритм такой если я правильно понял:
1. Копируем сортируемый лист под определенным именем
2. В случае отмены действий удаляем старый лист и переименовываем новый
3. Если отмены не было и книгу закрывают, тогда удалить новый лист (скопированный при сортировке)

да?

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

Добавлено: 15 июл 2008, 14:47
VictorM
да, так и предполагалось.

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

Добавлено: 15 июл 2008, 15:28
Mint86
Получилось примерно так:

Sub SortRezult()

Call CopySheet
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
Application.OnUndo "Отменить сортировку", "UndoSort"
End Sub

Sub CopySheet()
Sheets("Лист1").Select
Sheets("Лист1").Copy Before:=Sheets(1)
ActiveWindow.SelectedSheets.Visible = False
End Sub


Sub UndoSort()

Sheets("Лист1").Select
ActiveWindow.SelectedSheets.Delete
Sheets("Лист1 (2)").Visible = True
Sheets("Лист1 (2)").Select
Sheets("Лист1 (2)").Name = "Лист1"
Range("C33").Select
End Sub

Sub DeletUndoSheet()
Dim wsh As Worksheet

For Each wsh In ThisWorkbook.Worksheets
If wsh.Name = "Лист1 (2)" Then
wsh.Delete
End If
Next

End Sub


В модуле эта книга:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call DeletUndoSheet
End Sub

Осталось код к божескому виду привести :)

VictorM, SAS888 спасибо за помощь!