Hallo zusammen,
Voraussetzung ist: Die Überschriftenzeile enthält Überschriften
Folgenden Code in ein Modul der Mappe packen:
Code:
Option Explicit
Option Private Module
'Merker für letzten Sortiermodus der Spalte
Dim lColAufsteigend(1 To 256) As Boolean
Function BlattSortieren(ws As Worksheet, lRow As Long, lCol As Long)
Dim lCols As Long, lRows As Long, lRowsAkt As Long, x As Long
->Spaltenanzahl der Tabelle aus lRow
lCols = ws.Cells(lRow, ws.Columns.Count).End(xlToLeft).Column
->größte benutzte Zeilenanzahl der Spalten feststellen
lRows = 0
For x = 1 To lCols
lRowsAkt = ws.Cells(ws.Rows.Count, x).End(xlUp).Row
If lRowsAkt > lRows Then lRows = lRowsAkt
Next
->Wenn nicht mindestens 2 Zeilen zu sortieren sind Hinweis
If lRows < lRow + 2 Then MsgBox Gibt nichts zu sortieren: Exit Function
->Sortieren abhängig von letzter Sortierung der spalte
With ws.Range(ws.Cells(lRow + 1, 1), ws.Cells(lRows, lCols))
If lColAufsteigend(lCol) Then
.Sort Key1:=ws.Cells(lRow + 1, lCol), Order1:=xlDescending, Header:=xlNo
lColAufsteigend(lCol) = False
Else
.Sort Key1:=ws.Cells(lRow + 1, lCol), Order1:=xlAscending, Header:=xlNo
lColAufsteigend(lCol) = True
End If
End With
End Function
Jetzt zu den Button:
a) Die Visual-Basic-Symbolleiste sichtbar machen
(Ansicht->Symbolleisten->Visual Basic)
b) 1. Button setzen
b1) Auf der Visual-Basic-Symbilleiste->Hammer&Schraubenschlüssel' anklicken
b2) Auf der Werkzeugpalette den Command-Button auswählen
b3) Mit dem Cusor in die 1. Überschriften-Zelle einen Command-Button aufziehen (Größe so einrichten, daß auf jeden fall die linke obere Ecke in der Zelle liegt.
b4) Command-Button mit rechter Maus anklicken -> Steuerelement formatieren->Eigenschaften->von Zellposition und -größe abhängig setzen, dann OK
b5) Command-Button mit rechter Maus anklicken -> Eigenschaften
b5.1) unter Caption Überschrift eintragen
b5.2) TakeFocusOnClick auf False setzen
b2 - b5.2 für alle weiteren Überschriften analog anwenden
b6) für Command-Button Code einfügen
b6.1) Doppelklick auf Command-Button
der Cusor steht in einer Eignisprozedur der Form
Code:
Private Sub CommandButton4_Click()
End Sub
b6.2) Hier den folgenden Code eingeben
Code:
Private Sub CommandButton4_Click()
Dim ws As Worksheet
Dim lRow As Long, lCol As Long
lRow = CommandButton4.TopLeftCell.Row
lCol = CommandButton4.TopLeftCell.Column
Set ws = Me
Call BlattSortieren(ws, lRow, lCol)
AUFRAEUMEN:
Set ws = Nothing
End Sub
In diesem Beispiel ist es CommandButton4. Für die anderen Command-Button ist ebenso zu verfahren. Dabei sind die Zeilen
Code:
lRow = CommandButton4.TopLeftCell.Row
lCol = CommandButton4.TopLeftCell.Column
entsprechend dem CommandButton anzupassen, also z.B. für CommandButton1
Code:
lRow = CommandButton1.TopLeftCell.Row
lCol = CommandButton1.TopLeftCell.Column
b7) Knöpfe für->Werkzeugleiste' und->Editiermodus' auf der Visual-Basic-Symbolleiste ausschalten.
Jetzt sollte schon sortiert werden, wenn man eine Button drückt.
Den letzte Sortiermodus (aufsteigend oder absteigend ) merkt sich das Makro und bei wiederholter Betätigung des Buttons wird dann entgegengesetzt sortiert.
@wak66: Entspricht das so deinen Wünschen ?
Gruß Matjes