×
Traktatov.net » Excel. Трюки и эффекты » Читать онлайн
Страница 39 из 146 Настройки

После запуска данного макроса (для удобства можно назначить ему кнопку) рабочие листы текущей книги будут отсортированы либо по номерам, либо по алфавиту. Следует учитывать, что при включенной защите рабочей книги (Рецензирование → Изменения → Защитить книгу) выполнение данной операции невозможно.

Ниже приведен код макроса (листинг 2.9), при выполнении которого список отсортированных листов выводится на отдельный рабочий лист Сортировка.

Листинг 2.9. Список отсортированных листов

Sub SortSheets2()

Dim astrSheetNames() As String ' Массив для хранения имен

листов

Dim intSheetCount As Integer

Dim i As Integer

Dim objActiveSheet As Object

' Если нет активной рабочей книги – закрыть процедуру

If ActiveWorkbook Is Nothing Then Exit Sub

' Проверка защищенности структуры рабочей книги

If ActiveWorkbook.ProtectStructure Then

' Сортировка листов защищенной рабочей книги невозможна

MsgBox "Структура книги " & ActiveWorkbook.Name & _

« защищена. Сортировка листов невозможна.», _

vbCritical

Exit Sub

End If

' Сохраняем ссылку на активный лист книги

Set objActiveSheet = ActiveSheet

' Отключение сочетания клавиш Ctrl+Pause Break

Application.EnableCancelKey = xlDisabled

' Функция обновления экрана отключается

Application.ScreenUpdating = False

With ActiveWorkbook

' Cоздаем новый лист «Сортировка» (если он еще не создан)

On Error Resume Next

If .Sheets(«Сортировка») Is Nothing Then

.Sheets.Add.Name = «Сортировка»

End If

On Error GoTo 0

' Размещение данных на листе «Сортировка» (в столбец A)

intSheetCount = .Sheets.Count

For i = 1 To intSheetCount

.Sheets(«Сортировка»).Cells(i, 1) = .Sheets(i).Name

Next i

' Сортировка данных в ячейках листа «Сортировка» по содержимому _

столбца A

.Sheets(«Сортировка»).Range(«A1»).Sort _

Key1:=.Sheets(«Сортировка»).Range(«A1»), _

Order1:=xlAscending

' Заполнение массива имен отсортированными строками

ReDim astrSheetNames(1 To intSheetCount)

For i = 1 To intSheetCount

astrSheetNames(i) = .Sheets(«Сортировка»).Cells(i, 1)

Next i

' Перемещение листов

For i = 1 To intSheetCount

.Sheets(astrSheetNames(i)).Move .Sheets(i)

Next i

End With

' Переход на исходный рабочий лист

objActiveSheet.Activate

' Включаем обновление экрана

Application.ScreenUpdating = True

' Включение сочетания клавиш Ctrl+Pause Break

Application.EnableCancelKey = xlInterrupt

End Sub

Отличительной особенностью приведенной программы, помимо отображения списка листов книги на отдельном листе, является использование возможностей Excel для сортировки данных.

В данном случае также необходимо помнить, что при включенной защите рабочей книги операция невыполнима.

Рабочий лист

Рабочий лист является основным составным элементом рабочей книги. По умолчанию в состав новой книги включены три листа. Чтобы изменить количество листов в новой книге по умолчанию, необходимо войти в режим настройки Excel (для этого справа на панели быстрого доступа необходимо нажать кнопку с треугольником и в раскрывающемся списке выбрать пункт Другие команды), в разделе Основные, в поле Число листов, указать требуемое значение. Следует отметить, что максимально возможное количество листов в книге – 255.