Microsoft Excel

Herbers Excel/VBA-Archiv

Spalten sortieren

Betrifft: Spalten sortieren von: Guse
Geschrieben am: 19.10.2014 11:15:03

Hallo zusammen,

ich habe eine Tabelle von A2 - AD2. Die Spalten sollen in folgender Reihnenfolge via VBR sortiert werden. Leider sagt er mir immer Laufzeitfehler 91

Range("A2:AD900").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort.SortFields.Add Key:= _
Range("D2:D900"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort.SortFields.Add Key:= _
Range("B2:B900"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("Eingabe").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

  

Betrifft: AW: Spalten sortieren von: fcs
Geschrieben am: 19.10.2014 13:05:42

Hallo Guse,

vor dem Sortieren muss du prüfen, ob der Autofilter-Modus schon aktiv ist.
Wenn ja, dann darfst du

Range("A2:AD900").Select
Selection.AutoFilter

nicht ausführen, da sonst der Autofilter deaktiviert wird, was dann anschließend beim Versuch, den nicht mehr vorhandenen Autofilterbereich zu sortieren, zum Fehler führt.

Zusätzlich kann man die mit dem Rekorder aufgezeichneten Code-Zeilen in der folgenden Form vereinfachen.

Gruß
Franz
Sub Test()
    Dim wksEingabe As Worksheet
    Set wksEingabe = ActiveWorkbook.Worksheets("Eingabe")
    With wksEingabe
        .Activate
        'Prüfen, ob der Autofilter schon aktiv ist
        If .AutoFilterMode = True Then
            If .FilterMode = True Then
'                .ShowAllData
            End If
        Else
            .Range("A2:AD900").Select
            Selection.AutoFilter
        End If
    End With
    
    With wksEingabe.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wksEingabe.Range("D2"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    With wksEingabe.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wksEingabe.Range("B2"), SortOn:=xlSortOnValues, _
                Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
Gruß
Franz


  

Betrifft: AW: Spalten sortieren von: Guse
Geschrieben am: 19.10.2014 22:34:01

Vielen Dank

hat super geklappt.

Kannst du das auch noch in das o.g. Format bringen ???

ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").Sort.SortFields.Add(Range("A2:A595"), _
xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(13, 13 _
, 13)
With ActiveWorkbook.Worksheets("Tabelle1").Sort
.SetRange Range("A1:F595")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


  

Betrifft: AW: Spalten sortieren von: fcs
Geschrieben am: 20.10.2014 08:39:08

Hallo Guse,

das sieht dann wie folgt aus.
Allerdings ist diese Sortierung dann in einer Tabelle ohne Autofilter.

Gruß
Franz

Sub Test2()
    Dim wks As Worksheet, Zeile As Long
    
    Set wks = ActiveWorkbook.Worksheets("Tabelle1")
    
    With wks
        Zeile = .UsedRange.Row + .UsedRange.Rows.Count - 1 'letzte benutzte Zeile
        With .Sort
            .SortFields.Clear
            .SortFields.Add(wks.Range("A2"), xlSortOnCellColor, xlDescending, , _
                xlSortNormal).SortOnValue.Color = RGB(13, 13, 13)
            .SetRange wks.Range("A1:F" & Zeile)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub



  

Betrifft: AW: Spalten sortieren von: Guse
Geschrieben am: 20.10.2014 11:07:23

Hallo Franz,

danke.

wir würde es denn aussehen wenn es als Autofilter in die erste Code mit eingebaut wird ??


  

Betrifft: AW: Spalten sortieren von: fcs
Geschrieben am: 20.10.2014 12:54:02

Hallo Guse,

die Tabelle hat ja jetzt einen anderen Namen. Also müssen die entsprechenden Prüfungen ob Autofilter vorhanden ebenfalls wieder eingebaut werden.

Gruß
Franz

Sub test()
    Dim wksEingabe As Worksheet
    Dim wks As Worksheet, Zeile As Long
    
    Set wksEingabe = ActiveWorkbook.Worksheets("Eingabe")
    With wksEingabe
        .Activate
        'Prüfen, ob der Autofilter schon aktiv ist
        If .AutoFilterMode = True Then
            If .FilterMode = True Then
'                .ShowAllData
            End If
        Else
            .Range("A2:AD900").Select
            Selection.AutoFilter
        End If
    End With
    
    With wksEingabe.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wksEingabe.Range("D2"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    With wksEingabe.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add Key:=wksEingabe.Range("B2"), SortOn:=xlSortOnValues, _
                Order:=xlAscending, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    
    Set wks = ActiveWorkbook.Worksheets("Tabelle1") 'ggf. "Tabelle1" durch "Eingabe" ersetzen
    With wks
        .Activate
        Zeile = .UsedRange.Row + .UsedRange.Rows.Count - 1 'letzte benutzte Zeile
        'Prüfen, ob der Autofilter schon aktiv ist
        If .AutoFilterMode = True Then
            If .FilterMode = True Then
'                .ShowAllData
            End If
        Else
            .Range("A2:AD" & Zeile).Select
            Selection.AutoFilter
        End If
    End With
    With wks.AutoFilter.Sort
        .SortFields.Clear
        .SortFields.Add(Key:=wks.Range("A2"), SortOn:=xlSortOnCellColor, _
                Order:=xlDescending, DataOption:=xlSortNormal).SortOnValue.Color _
                = RGB(13, 13, 13)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub



 

Beiträge aus den Excel-Beispielen zum Thema "Spalten sortieren"