美好的一天职业选手 我有一堆我一起运行的宏,其中最后一个应该使用列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
答案 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