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

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

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

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

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

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

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

Получилось примерно так:

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 спасибо за помощь!
Ответить