我有一个按颜色,按日期,然后按日期排序的宏。
如果我删除日期,则不只是重新排序,它还会重新排序,然后留下空白行,该行以前是删除日期的行。我尝试添加另一个排序层,在其中我按颜色RGB(0,0,0)进行排序。
If Not Intersect(Target, Range("A:C")) Is Nothing Then
MsgBox ("sorting")
ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add(Range("C:C"), _
xlSortOnCellColor, _
xlDescending, _
, _
xlSortNormal).SortOnValue.Color = RGB(146, 208, 80)
ActiveSheet.Sort.SortFields.Add2 Key:=Range("C:C"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
ActiveSheet.Sort.SortFields.Add2 Key:=Range("B:B"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal
ActiveSheet.Sort.SortFields.Add2(Range("C:C"), _
xlSortOnCellColor, _
xlDescending, _
, _
xlSortNormal).SortOnValue.Color = RGB(255, 255, 255)
With ActiveSheet.Sort
.SetRange Range("A:C")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End If
答案 0 :(得分:1)
我相信我可能会对您的问题有一个答案,我确信第二个问题至少……
我只能猜测,因为我没有您的源文件来检查任何不正常情况,也没有您的整个宏。如果我不得不猜测,我会说这是导致此问题的宏中的某个功能,或者也可能是如何定义排序范围的问题。您仅指定列,而不指定实际的开始单元,也没有结束单元。我用来对数据进行排序的方法是动态定义确切范围。
请尝试根据您提供的数据和提供的代码对我进行调整的代码:
If Not Intersect(Target, Range("A:C")) Is Nothing Then
MsgBox ("sorting")
With ActiveWorkbook.ActiveSheet
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<-- get last row of data in column "A"
.Sort.SortFields.Clear
.Sort.SortFields.Add(Range("C1:C" & lastRow), _
xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(146, 208, 80)
.Sort.SortFields.Add Key:=.Range("B1:B" & lastRow), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("C1:C" & lastRow), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SortFields.Add(Range("C1:C" & lastRow), _
SortOn:=xlSortOnCellColor, Order:=xlDescending, DataOption:=xlSortNormal).SortOnValue.Color = RGB(255, 255, 255)
With .Sort
.SetRange Range("A1:C" & lastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End If
主要调整是lastRow的声明,该声明调整数据范围的底部(在您的情况下这无关紧要,但是有时您可能会在想要排序的数据之前遇到数据,直到某些行,这将非常有用。此处定义的定义对其他很多宏非常有用,并且有助于动态设置范围。)
我还添加了开始数据,如您在Range("C1:C" & lastRow)
我已经在您提供的示例数据上对此进行了测试,并且可以正常工作。我希望它完全可以为您服务。