Die Sortiermethode des Rangeobjektes
In einer Prozedur zum Sortieren der Daten wird eine Objektvariable verwendet
Die Kenntnis über das Sortieren von Listen wird vorausgesetzt ("Daten" - "Sortieren...").
Es soll ein Makro Nach_Namen_sortieren aufgezeichnet werden, das in Tabelle 1 die Zelle A3 auswählt und nach Nachnamen aufsteigend sortiert.
Ein weiteres Makro Nach_Personalnr_sortieren sortiere nach Personalnummer aufsteigend.
Tastenkombinationen sollen nicht zugewiesen werden.
Da nach dem Öffnen einer Arbeitsmappe die Aufzeichnungen in einem neuen Modul angelegt werden, seien Sie also nicht über ein zusätzliches Modul überrascht.
Das aufgezeichnete Ergebnis könnte so aussehen:
Sub nach_Namen_sortieren()
Sheets("Tabelle1").Select
Range("A3").Select
Range("A2:W35").Sort _
Key1:=Range("E3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Sub nach_Personalnr_sortieren()
Sheets("Tabelle1").Select
Range("A3").Select
Range("A2:W35").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Der Aufruf und die Abarbeitung der beiden neuen Prozeduren dürften keine Probleme machen.
Neu ist die Methode Sort, die auf das Range-Objekt "A2:W35" angewendet wird.. Von den folgenden Parameter ist Key1 von wesentlichen Interesse, der die Spalte festlegt, wonach sortiert werden soll.- Auch Order1:=xlAscending ist verständlich, denn dort wird die Sortierung als aufsteigend angegeben. Die folgenden Parameter werden aus dem Sortierdialog bzw. der Hilfe <F1> erklärt.
Diese beiden Sortiermethoden haben eine wesentlichen Nachteil: Es wird nur eine Liste vom konstanten Bereich "A2:W35" bearbeitet. Wenn die Liste größer wird, versagt diese Anweisung.
Sort wird auf einen Bereich angewendet. Die folgende Anweisung gestattet die Anwendung auf einen variablen Bereich.
Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion
CurrentRegion (hier ab Zelle A3) ist ein Bereichsobjekt (Range) und liefert immer den Bereich mit aktueller Größe. Dieses Objekt wird einer Objektvariablen zugewiesen. Diese Variable nimmt praktisch diesen Bereich auf und kann dann in verschiedenen Anweisungen verwendet werden
Zunächst definieren Sie diese Objektvariable.
Dim Bereich As Range
Dann weisen Sie ihr den aktuellen Bereich zu.
Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion
(Bereich zeigt zu der aktuellen Liste)
Nun ersetzen Sie den unveränderlichen Range ("A2:W35") durch den variablen Bereich.
Bereich.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Korrigieren Sie die beiden Prozeduren.
Dim Bereich As Range ' Diese Variable wird vor der ersten Prozedur des Moduls notiert.
' : Damit können beide Prozeduren diese Variable nutzen.
Sub nach_Namen_sortieren()
Sheets("Tabelle1").Select
Range("A3").Select
Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion
Bereich.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Sub nach_Personalnr_sortieren()
Sheets("Tabelle1").Select
Range("A3").Select
Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion
Bereich.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Nun können Sie die beiden Prozeduren problemlos aufrufen.
Dieser Beitrag ist öffentlich.
Zugriff auf alle Inhalte haben Sie als Mitglied
Werden Sie Probemitglied - kostenlos.
Ohne finanzielles Risiko haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Die Anmeldung dauert drei Minuten. Sie können während der ersten 14 Tage ohne Angabe von Gründen stornieren. Eine E-Mail genügt.
Weitere Informationen finden Sie auf unserer Infoseite zur Mitgliedschaft und in unseren AGB.
Ich bin bereits Mitglied