VBA代码按NO FILL

时间:2016-07-24 14:42:10

标签: vba excel-vba excel

美好的一天职业选手     我有一堆我一起运行的宏,其中最后一个应该使用列B按NO FILL排序,这样没有背景颜色的数据就会出现在列表的顶部。 (数据包含大约10,000行和35列,基于下面的代码,当我使用蓝色或紫色首先列出时,它可以工作,但它不适用于NO FILL。我使用0,我也使用16777215,但没有运气。我做错了什么?   PS:我找不到任何其他VBA代码的NO FILL。 xlNone或vbWhite也不起作用。    谢谢。

Sub ColByNofill()

    'Sub Just(sht As Worksheet)
    Dim rngSort As Range
    Dim rngTable As Range
    Dim sColor As Long
    Dim sht As Worksheet

    Set sht = Worksheets(1)

    sColor = 0 'No Fill

    'sColor = 16777215   ' white color
    'sColor = 10498160    'purple

    'sColor = 15790082 ' blue color

    RowCount = sht.Range("B1").End(xlDown).Row
    Set rngSort = sht.Range("B1:A" & RowCount)
    Set rngTable = sht.Range("B1:" & sht.Cells(RowCount, sht.UsedRange.Columns.Count).Address(RowAbsolute:=False, ColumnAbsolute:=False))

    sht.Sort.SortFields.Clear
    sht.Sort.SortFields.Add(rngSort, _
        xlSortOnCellColor, xlAscending, , _
        xlSortNormal).SortOnValue.Color = sColor

    With sht.Sort
        .SetRange rngTable
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

2 个答案:

答案 0 :(得分:0)

这只是一个建议,因为我真的不知道如何将“No Fill”单元格排在顶部,但为什么不用红色为“No Fill”单元格着色,例如,然后按颜色排序?之后,您可以根据需要恢复颜色。或者,您可以根据颜色列表指定某些值,然后进行排序。

答案 1 :(得分:0)

要回答我自己的问题,我所要做的就是停止分配颜色,所以我注释掉sColor = 0并更改了sortOnValue.color = xlNone,请参阅下面的编辑代码。

Sub ColByNoFill
Dim rngSort As Range
Dim rngTable As Range
Dim sColor As Long

'sColor = 0

RowCount = sht.Range("A1").End(xlDown).Row
Set rngSort = sht.Range("A1:A" & RowCount)
Set rngTable = sht.Range("A1:" & sht.Cells(RowCount, sht.UsedRange.Columns.Count).Address(RowAbsolute:=False, ColumnAbsolute:=False))

sht.Sort.SortFields.Clear
sht.Sort.SortFields.Add(rngSort, _
    xlSortOnCellColor, xlAscending, , _
    xlSortNormal).SortOnValue.Color = xlNone

With sht.Sort
    .SetRange rngTable
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub