Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ListObject sortieren

ListObject sortieren
21.01.2020 13:10:37
Stefan
Hallo Leute,
ich hab da ein kleines Problem und hoffe hier eine Lösung zu finden. Ich habe mir ein kleines Auswerte-Tool gebaut, welches Excel-Dateien in einem Ordner nach bestimmten Informationen durchsucht und diese im Auswerte-Tool in einer Tabelle (ListObject) ausgibt. Ich möchte nun diese Tabelle nach einer Spalte, in der Termine eingetragen sind, chronologisch sortieren.
Da die Tabelle nun die Möglichkeit bietet auf Knopfdruck eben diese Sortierung durchzuführen (der kleine Pfeil in der Überschrift der Spalte - Nach Datum sortieren aufsteigend), habe ich mir gedacht, das ganz einfach über den Markorecoder aufzunehmen und in meine Prozedur einzubinden.
Hier die Aufzeichnung:

Sub Sortieren()
ActiveWorkbook.Worksheets("Auswertung").ListObjects("Datenliste").sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Auswertung").ListObjects("Datenliste").sort. _
SortFields.Add2 Key:=Range("Datenliste[[#All],[Soll Abschlusstermin]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Auswertung").ListObjects("Datenliste").sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Das Makro für sich funktioniert wunderbar, es sortiert die Tabelle chronologisch nach Datum in der Spalte. Binde ich jedoch dieses Makro in meine Prozedur mit ein, oder rufe diese über Call Sortieren auf, erscheint immer diese Fehlermeldung:
Die Methode 'Range' für die Methode '_Global' ist fehlgeschlagen.
Hat jemand ne Idee warum das so ist und wie ich dieses Makro umschreiben muss, damit es funktioniert?
Vielen Dank
Gruß
Stefan
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListObject sortieren
21.01.2020 14:11:28
guennih
Wenn bei Deinem Makro nicht die Tabelle "Auswertung" aktiv ist, erklärt das den Fehler.
Range ist Teil eines Worksheets und könnte bei Dir
ActiveWorkbook.Worksheets("Auswertung").
vorangestellt brauchen.
Gruß,
Günther
AW: ListObject sortieren
21.01.2020 17:37:27
Luschi
Hallo Stefan,
bei mir klappt das, wenn Du das Makro so umschreibst - dann muß das Tabellenblatt mit
der formatiertenn Tabelle )ListObject) nicht das aktive Blatt sein.

Sub Sortieren()
With ActiveWorkbook.Worksheets("Auswertung").ListObjects("Datenliste").Sort
.SortFields.Clear
.SortFields.Add2 Key:=Range("Datenliste[[#All],[Soll Abschlusstermin]]"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: ListObject sortieren
23.01.2020 08:21:11
Stefan
Hallo Leute,
vielen Dank für eure Vorschläge, habs jetzt so wie von Luschi vorgeschlagen umgeschrieben und es funktioniert.
Vielen lieben Dank nochmal!
Gruß
Stefan
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

ListObject in Excel sortieren


Schritt-für-Schritt-Anleitung

Um ein ListObject in Excel VBA zu sortieren, kannst Du folgendes Makro verwenden. Achte darauf, dass das richtige Tabellenblatt aktiv ist oder dass Du es korrekt referenzierst. Hier ist ein Beispiel, wie der Code aussehen kann:

Sub Sortieren()
    With ActiveWorkbook.Worksheets("Auswertung").ListObjects("Datenliste").Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=Range("Datenliste[[#All],[Soll Abschlusstermin]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Stelle sicher, dass die Tabelle "Datenliste" und die Spalte "Soll Abschlusstermin" korrekt benannt sind. Dieses Makro sortiert die Daten in aufsteigender Reihenfolge nach dem Datum.


Häufige Fehler und Lösungen

Ein häufiger Fehler, der beim Sortieren von ListObjects auftreten kann, ist die Fehlermeldung: "Die Methode 'Range' für die Methode '_Global' ist fehlgeschlagen." Dies passiert oft, wenn das aktive Arbeitsblatt nicht das gewünschte ist.

Lösung: Verwende die vollständige Referenz auf das Arbeitsblatt, wie im folgenden Beispiel:

ActiveWorkbook.Worksheets("Auswertung").Range("Datenliste[[#All],[Soll Abschlusstermin]]")

So kannst Du sicherstellen, dass die Range korrekt erkannt wird.


Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, kannst Du die Daten auch manuell in Excel sortieren. Klicke einfach auf den Pfeil in der Spaltenüberschrift der Liste und wähle die gewünschte Sortieroption aus. Dies ist besonders nützlich, wenn Du nur einmalig sortieren musst und kein Makro nutzen möchtest.


Praktische Beispiele

Hier ist ein weiteres Beispiel, wie Du ein ListObject sortieren kannst, indem Du das Arbeitsblatt vorher aktivierst:

Sub Sortieren()
    Dim ws As Worksheet
    Set ws = ActiveWorkbook.Worksheets("Auswertung")

    With ws.ListObjects("Datenliste").Sort
        .SortFields.Clear
        .SortFields.Add2 Key:=ws.Range("Datenliste[[#All],[Soll Abschlusstermin]]"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

In diesem Beispiel wird zuerst das Arbeitsblatt als Variable definiert, was den Code lesbarer macht und potenzielle Fehlerquellen reduziert.


Tipps für Profis

  • Verwende Named Ranges: Statt direkte Zellreferenzen zu verwenden, kannst Du benannte Bereiche nutzen, um den Code klarer und einfacher zu warten.
  • Erstelle eine Fehlerbehandlung: Implementiere eine Fehlerbehandlung in Deinem Makro, um auf unerwartete Situationen reagieren zu können. Beispielsweise:
On Error GoTo Fehler
' Dein Sortiercode hier
Exit Sub
Fehler:
    MsgBox "Fehler: " & Err.Description
  • Teste in einer sicheren Umgebung: Bevor Du Änderungen an wichtigen Daten vornimmst, teste Deine Makros in einer Kopie der Datei oder einer Testumgebung.

FAQ: Häufige Fragen

1. Kann ich mehrere Spalten gleichzeitig sortieren?
Ja, Du kannst mehrere Sortierfelder hinzufügen, indem Du die .SortFields.Add2 Methode mehrmals aufrufst.

2. Funktioniert das auch in älteren Excel-Versionen?
Der Code ist ab Excel 2010 und neuer kompatibel. Ältere Versionen unterstützen möglicherweise nicht alle Funktionen.

3. Was ist der Unterschied zwischen ListObject und Range?
Ein ListObject ist eine strukturierte Tabelle in Excel, die zusätzliche Funktionen wie Sortieren und Filtern bietet, während Range einfach nur einen Zellbereich darstellt.

4. Wie kann ich die Sortierreihenfolge ändern?
Ändere einfach den Parameter Order:=xlAscending zu Order:=xlDescending, um die Reihenfolge umzukehren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige