按1列的值和另一列的颜色对动态数据范围进行排序

时间:2016-10-12 05:25:42

标签: excel vba columnsorting

我正在使用vba按第2列的单元格颜色和第1列的值对动态范围的数据进行排序。代码只能按值排序,但在添加代码进行排序时出现语法错误细胞颜色也是如此。我已经在互联网上搜索了几个小时的类似情况,但都失败了。 (也许我不知道正确的关键词)

以下是我正在处理的代码。请对我说清楚,谢天谢地!

Dim oneRange As Range
Dim aCell As Range
Dim bCell As Range

Set oneRange = Selection
Set aCell = ActiveCell
Set bCell = ActiveCell.Offset(0, 1)

oneRange.Sort key1:=aCell, Order1:=xlAscending, Header:=xlYes

oneRange.Sort Key2:=bCell, _
   SortOn:=xlSortOnCellColor, _
   Order:=xlAscending, _
    DataOption:=xlSortNormal).SortOnValue.Color = _
    RGB(198, 239, 206)

  End Sub

1 个答案:

答案 0 :(得分:0)

您正在尝试混合Range Sort和WorkSheet Sort。

此行仍然具有录制宏时的右括号。该宏使用的是Worksheet SortFields.Add方法。

DataOption:=xlSortNormal).SortOnValue.Color = _

根据您的问题,无法编写准确的宏。尽量避免使用Selection,Activate,ActiveCell等。

这应该让你开始:

Sub SortData()
    Dim aColumn As Range, bColumn As Range, Target As Range

    With ActiveWorkbook.Worksheets("Sheet1")
        Set Target = .Range("A1").CurrentRegion
        Set aColumn = .Range("A2", .Range("A" & .Rows.Count).End(xlUp))
        Set bColumn = .Range("B2", .Range("B" & .Rows.Count).End(xlUp))

        With .Sort
            .SortFields.Clear
            .SortFields.Add(bColumn, xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, 239, 206)
            .SortFields.Add Key:=aColumn, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange Selection
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub