我为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
问题是,一旦我输入新数据,按字母顺序排序会覆盖颜色排序。
有人可以帮我制作一下,以便颜色排序覆盖字母吗?
非常感谢任何帮助!
答案 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
的所有引用。