Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 按字母顺序和单元格颜色排序_Vba_Excel_Excel 2010 - Fatal编程技术网

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

我试图按字母顺序和单元格颜色对多个列表进行排序,但要在一定范围内,这样不会花费太长时间。基本上,假设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 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之后添加颜色作为选项。知道为什么吗?