Сортировка наименований листов (вкладок) по алфавиту.

Автор Зритель, 6 сентября 2024, 23:27

0 Пользователи и 1 гость просматривают эту тему.

Зритель

Здравствуйте уважаемые знающие . Подскажите пожалуйста как по алфавиту отсортировать наименование листов (вкладок).
Я нажимаю выделить все , затем сортировка от A-Z, но сортируются значения в ячейках листа :-\ .
Помогите пожалуйста.
Лист это просто для примера, чтоб показать где я хочу отсортировать.
Заранее спасибо.

sokol92

Встроенных средств для сортировки листов документа по именам, мне кажется, нет.
Макросом, разумеется, можно сделать.
Владимир.

economist

Много листов - плохо.
Мало листов - сортируйте перетаскиванием.
Если уже много листов, лень перетаскивать и нужна удобная навигация - можно вставить Лист с Оглавлением (макрос) или сделать функцией ГИПЕРССЫЛКА на нужных листах, скажем, в первой строке что-то типа NavBar, как на веб-сайтах. Клик по ссылке переведет на нужный лист.
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

sokol92

Один из вариантов (проверьте!):
Option Explicit

' Сортирует листы документа (регистронезависимo)
Sub SortSheetsByName(Optional ByVal oDoc As Object)
  Dim oSheets As Object, n As Long, i As Long, j As Long, j0 As Long, shName As String
  If IsMissing(oDoc) Then oDoc=ThisComponent
 
  n=oDoc.Sheets.Count
  If n<2 Then Exit Sub
 
  For i=0 To n-2      ' последний лист не сортируем
    oSheets=oDoc.Sheets
    shName=oSheets(i).Name
    j0=i
    For j=i+1 To n-1  ' ищем лист с наименьшим именем (регистронезависимо)
      If LCase(oSheets(j).Name)<LCase(shName) Then
        shName=oSheets(j).Name
        j0=j
      End If
    Next j
   
    ' Переставляем лист с наименьшим именем на место i     
    If j0<>i Then oSheets.moveByName shName, i
  Next i 

End Sub
Владимир.

Зритель