Vba 按字母顺序和单元格颜色排序
我试图按字母顺序和单元格颜色对多个列表进行排序,但要在一定范围内,这样不会花费太长时间。基本上,假设VBA选择例如B列第3-88行,按字母排序,然后按颜色排序。然后移到下一列C3:C88等,直到第NY列 当我尝试它时,我得到运行时错误1004:对象“\u Global”的Mathod范围失败 这是我的VBA:Vba 按字母顺序和单元格颜色排序,vba,excel,excel-2010,Vba,Excel,Excel 2010,我试图按字母顺序和单元格颜色对多个列表进行排序,但要在一定范围内,这样不会花费太长时间。基本上,假设VBA选择例如B列第3-88行,按字母排序,然后按颜色排序。然后移到下一列C3:C88等,直到第NY列 当我尝试它时,我得到运行时错误1004:对象“\u Global”的Mathod范围失败 这是我的VBA: Sub SortAlphaColor() ' Sorts rows within a list from A-Z ' Run Clean all first to avoid sortin
Sub SortAlphaColor()
' Sorts rows within a list from A-Z
' Run Clean all first to avoid sorting blanks
' Set maximum range to avoid sorting too many rows
Dim rngFirstRow As Range
Dim rng As Range
Dim ws As Worksheet
Application.ScreenUpdating = False
Set ws = ActiveSheet
Set rngFirstRow = ws.Range("B3:NY3")
For Each rng In rngFirstRow
With ws.Sort
.SortFields.Clear
.SortFields.Add Key:=rng, Order:=xlAscending
'assuming there are no blank cells..
.SetRange ws.Range(rng, rng.Range("B88").End(xlUp))
'VBA from second module
.SortFields.Add(Range(rng), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(198, 239, 206) <- this line is highlighted in debug
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Header = xlYes
.MatchCase = False
.Apply
End With
Next rng
Application.ScreenUpdating = True
End Sub
这对我很有用:
Sub SortAlphaColor()
Dim rngFirstRow As Range
Dim rng As Range, rngSort As Range
Dim ws As Worksheet
Application.ScreenUpdating = False
Set ws = ActiveSheet
Set rngFirstRow = ws.Range("B3:NY3")
For Each rng In rngFirstRow.Cells
With ws.Sort
Set rngSort = rng.Resize(86, 1) 'to row 88
.SortFields.Clear
.SortFields.Add Key:=rng, SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add(rng, xlSortOnCellColor, xlAscending, , xlSortNormal). _
SortOnValue.Color = RGB(198, 239, 206)
.SetRange rngSort
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Next rng
Application.ScreenUpdating = True
End Sub
你的问题在这里的某个地方:我想是Rangerng。将其更改为simply rng…不确定发生了什么,但当我运行它时,它将第89行移到了第3行:/it’它不是如您所期望的那样进行排序吗?。。。首先使用F8键运行您的过程,并检查迭代的开始是否正常。我想你们子系统的最终结果是基于NY3单元格的整个范围的排序结果…rng.RangeB88你们确定要这个吗?如果rng=B3,则rng.RangeB88=C90,即在工作表以外的任何对象上使用范围时,范围始终是相对的。也许你想要像rng.Resize86,1这样的东西。另外,您不需要.SortFields.AddRangerng,…:因为rng已经是一个范围对象,所以您可以单独使用rng.SortFields.Addrng,…。哦,我不确定。我只需要确保它在第3行和第88行之间排序。以前它会处理整个专栏,导致我的工作表崩溃,所以现在我只是想确保它不会超出需要的范围。这怎么能转换成C?ThanksHow我可以系鞋带吗?:这是一个问题,因为我正试图做同样的事情,但没有成功。我没有嵌入互操作dll,所以我可以在SortOnValue之后找到颜色。这就是我被困的地方。我不太了解C和interop,所以你可能需要在这方面发布一个单独的问题。谢谢你的回复。我不明白。在SortOnValue之后添加颜色作为选项。知道为什么吗?