Meine Programmversion: EXCEL 2002, SP3.
Hallo Zusammen!
Ich habe in meiner Excel-Liste zwei Makros.
- Makro „Alle“: Dieses Makro hebt eine vorhandene Filterung auf und sortiert alle Daten nach Spalte „A“.:
- Makro „Status_Todo“: Dieses Makro selektiert die Datensätze nach bestimmten Spalteninhalten und sortiert sie an-schließend nach dem Inhalt einer anderen Spalte:
(Makro-Quellcode sh. unten)
Bei der Aufzeichnung der Makros war das Problem, dass Excel die ursprüngliche „Range“ abgespeichert hat, so dass Sätze, die danach eingefügt wurden, nicht mehr sortiert wurden. Ich habe daher das Makro manuell geändert, so dass die Range jetzt auf „A2:Z999“ verweist. Dies erscheint mir ausreichend, da ich nie mehr als 999 Zeilen in den entspre-chenden Listen habe.
Mein Problem ist, dass Excel gelegentlich automatisch die Range von „A2…“ auf „A1…“ zurücksetzt. Dies führt dazu, dass auch die Titelzeile mitsortiert wird. Keine Ahnung, warum Excel dies macht, oft funktionieren die Makros wochenlang problemlos, um dann wieder anzufangen „zu spinnen“.
Gibt es eine intelligentere Möglichkeit, die zu sortierende Range zu definieren, bzw. Excel endgültig klar zu machen, dass die Kopfzeile natürlich nicht mitsortiert werden soll?
Bei der Gelegenheit: Das Makro „Alle“ kann nicht ausgeführt werden, wenn die Sätze gar nicht gefiltert sind. Dann kommt ein Debug-Fehler. Aus der Datenbank-Programmierung weiß ich, daß es dort kein Problem gibt, wenn man eine Tabelle die bereits in physischer Ordnung ist nochmals auf physische Ordnung setzt. Excel scheint hier zickiger zu sein. Gibt es eine Möglichkeit, daß Excel hier etwas „lockerer“ wird?
Vielen Dank an alle Makrospezialisten in voraus.
Conrad
Makro-Quellcode:
-
Sub Alle()
’ Alle Makro
’ Hebt alle Filter auf und zeigt alle Sätze an
ActiveSheet.ShowAllData
Range(„A2“).Select
Range(„A2:Z999“).Sort Key1:=Range(„A2“), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
End Sub -
Sub Status_todo()
'Sortiert Status nicht „erledigt“ und nicht „zurückgestellt“
Selection.AutoFilter Field:=12, Criteria1:=„Erl“, Operator:=xlAnd, _
Criteria2:=„Zur“
Range(„A2“).Select
Range(„A2:Z999“).Sort Key1:=Range(„B2“), Order1:=xlAscending, Key2:=Range( _
„C2“), Order2:=xlAscending, Key3:=Range(„A2“), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
End Sub