Sheets sortieren

.. das wohl mächtigste Werkzeug in Bill Gates' Büro-Sippe. Ob reine Formeln, PowerQuery oder VBA. Hier bleiben kaum Wünsche unerfüllt.
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Sheets sortieren

#1

Beitrag von d'r Bastler »

Moin allerseits,

folgendes Snippet sortiert die Arbeitsblätter einer Mapp alphanumerisch:

Code: Alles auswählen

Sub SheetsSort()
Dim i As Integer, j As Integer, iSheets As Integer
Application.ScreenUpdating = False
    iSheets = Sheets.Count
    For i = 1 To iSheets - 1
        For j = i + 1 To iSheets
            If Sheets(j).Name < Sheets(i).Name Then
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
Application.ScreenUpdating = True
End Sub
Viel Spaß damit! und Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 670
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 175 Mal
Danksagung erhalten: 90 Mal

Re: Sheets sortieren

#2

Beitrag von d'r Bastler »

Moin allerseits, moin Nanu ;)

Sheets alphanumerisch zu sortieren ist ja nett, aber vielleicht hatte die vorherige Sortierung auch ihren Sinn :o ? Mit folgendem Snippet (das in ein Allg. Modul gehört) genügt ein Klick für sortiert und vorherige Reihenfolge.

Code: Alles auswählen

Option Explicit
Public col As Collection, isSorted As Boolean

Sub SheetsManager()
If isSorted = True Then
    RestoreSequence
Else
    SortSheets
End If
End Sub


Sub SortSheets()
Dim app As Application
Dim i As Integer, j As Integer, iSheets As Integer
Dim sName As String, sTab As String, sNext As String
Set app = Application: Set col = New Collection

'Aktuelle Sequenz in col schreiben
For i = 1 To Sheets.Count
    sName = Sheets(i).Name
    col.Add sName
Next i

'Sheets alphanumerisch nach Tabs sortieren
app.ScreenUpdating = False
    iSheets = Sheets.Count
    For i = 1 To iSheets - 1
        For j = i + 1 To iSheets
            If Sheets(j).Name < Sheets(i).Name Then
                Sheets(j).Move before:=Sheets(i)
            End If
        Next j
    Next i
app.ScreenUpdating = True

isSorted = True
MsgBox "Sortiert!", , isSorted

End Sub

Sub RestoreSequence()
Dim app As Application
Dim i As Integer
Dim sTab As String, sNext As String
Set app = Application

'Sequenz wiederherstellen, nach col sortieren
app.ScreenUpdating = False
    For i = 1 To col.Count - 1
        sTab = col.Item(i)
        sNext = col.Item(i + 1)
        Sheets(sNext).Move after:=Sheets(sTab)
    Next i
app.ScreenUpdating = True

isSorted = False
MsgBox "Zurückgesetzt!", , isSorted

End Sub

Viel Spaß damit! und schöne Grüße
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
Nanu
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: Ahrefs [Bot] und 0 Gäste