自动排序覆盖颜色排序

时间:2018-04-17 15:01:24

标签: excel excel-vba sorting colors vba

我为excel创建了一个数据库。 目标是将数据输入到其中。按颜色自动排序,然后按字母顺序排序。

我使用以下VBA进行自动排序。

Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("A1").Sort Key1:=Range("A2"), _
          Order1:=xlAscending, Header:=xlYes, _
          OrderCustom:=1, MatchCase:=False, _
          Orientation:=xlTopToBottom

    End If

End Sub

我已经为颜色排序设置了宏,如下所示:

 With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    ActiveWorkbook.Worksheets("Master").ListObjects("Table2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Master").ListObjects("Table2").Sort.SortFields.Add( _
        Range("Table2[Name]"), xlSortOnCellColor, xlDescending, , xlSortNormal). _
        SortOnValue.Color = RGB(255, 0, 0)
    With ActiveWorkbook.Worksheets("Master").ListObjects("Table2").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

问题是,一旦我输入新数据,按字母顺序排序会覆盖颜色排序。

有人可以帮我制作一下,以便颜色排序覆盖字母吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

当您直接设置Range.Sort属性时,会删除现有的SortFields

可选步骤:循环并删除.SortOn不是SortFields的任何SortOnCellColor,以删除任何非颜色排序

要在最后添加排序,您只想添加一个新的SortField,就像您已经为颜色做的那样,然后应用排序:

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Not Intersect(Target, Me.Range("A:A")) Is Nothing Then
        'Add new SortField to end of existing Sorts
        Me.ListObjects("Table2").Sort.SortFields.Add Key:=Me.Range("A2"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        'Apply new SortFields
        Me.ListObjects("Table2").Sort.Apply
    End If
End Sub

然后,从代码的其余部分中删除对ActiveWorkbook的所有引用。