Autor: Peter Haserodt --- Aus Excel VBA - Gruppe:
Häufige FragenBlattsortierung in der Arbeitsmappe
Autor: Peter Haserodt - Erstellt: -- - Letzte Revision: --
Blätter (Tabellen) sortieren ist immer mal erwünscht.
Hier der Code, der innerhalb des Codes näher erläutert wird.
Die Funktion Quicksort wurde an anderer Stelle schon vorgestellt.
Option Explicit
Public Sub BlattSortierung()
Dim vX() As String, i As Integer
' Peter Haserodt 2004
'Nimmt hier das aktive Workbook und setzt voraus das nichts geschützt ist.
'Muss sonst angepasst werden
' Sortiert alle Blätter also auch z.B. Diagramme
On Error GoTo Fehler
With ActiveWorkbook
ReDim vX(.Sheets.Count) ' Das Feld auf die Blattanzahl dimensionieren
If .Sheets.Count = 1 Then Exit Sub ' Dann muss nicht sortiert werden
For i = 1 To .Sheets.Count ' Das Feld mit den Blattnamen füllen
vX(i) = .Sheets(i).Name
Next i
QuickSort_Feld vX, 1, .Sheets.Count, False ' Jetzt aufsteigend sortieren
.Sheets(vX(1)).Move Before:=.Sheets(1) ' Das erste Blatt nach vorne
For i = 2 To .Sheets.Count ' und jetzt die anderen
.Sheets(vX(i)).Move After:=.Sheets(i - 1)
Next i
End With
Exit Sub
Fehler:
MsgBox Err.Description
End Sub
Private Sub QuickSort_Feld(DasFeld, StartUnten, _
EndeOben, Absteigend As Boolean)
'QuickSort Standard
Dim iUnten As Long, iOben, iMitte, y
iUnten = StartUnten
iOben = EndeOben
iMitte = DasFeld((StartUnten + EndeOben) / 2)
While (iUnten <= iOben)
If Not Absteigend Then
While (DasFeld(iUnten) < iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte < DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
Else
While (DasFeld(iUnten) > iMitte And iUnten < EndeOben)
iUnten = iUnten + 1
Wend
While (iMitte > DasFeld(iOben) And iOben > StartUnten)
iOben = iOben - 1
Wend
End If
If (iUnten <= iOben) Then
y = DasFeld(iUnten)
DasFeld(iUnten) = DasFeld(iOben)
DasFeld(iOben) = y
iUnten = iUnten + 1
iOben = iOben - 1
End If
Wend
If (StartUnten < iOben) Then Call QuickSort_Feld(DasFeld, _
StartUnten, iOben, Absteigend)
If (iUnten < EndeOben) Then Call QuickSort_Feld(DasFeld, _
iUnten, EndeOben, Absteigend)
End Sub
Weitere Artikel der Gruppe: Häufige Fragen Aus Excel VBA
Nach oben