有没有办法使用 Excel 和 VBA 对选定的非空白连续单元格(即任意选择的范围)进行排序?

问题描述 投票:0回答:1

我的Excel文档用作金属熔化文档。它用于混合各种合金。进行熔体时,我们将选择行并为行着色以指示熔体材料的选择。我有 5 个工作按钮,这是我们在任何时候打开的熔化极限。我还有一个排序按钮和一个空白按钮,用于在金属加工后从单元中去除颜色。消隐按钮还将删除突出显示的单元格中的数据。

我的问题在于,我可以使用 Excel 的自定义排序功能进行排序,但是,它需要用户输入并将其应用到定义的范围。当用户选择下一组范围时,这些输入将被删除。

我的排序函数设计为首先按单元格颜色按黄色、蓝色、绿紫色和深蓝色的顺序排序,然后对标识列单元格值进行排序。目前,我的排序按钮适用于单列。我希望行中的数据随着标识列移动。

所有文档的 VBA 脚本都在一个模块中,附在下面。

New_macro() - New_macro6() 用于为单元格着色,6 用于为 None 着色和清除单元格。

ColourSort() 是不起作用的排序函数 - 错误在这里 -
[![在此处输入图像描述][1]][1]

由于底部有一个统计行,我不想对列的整个长度进行排序...

Picture of excel document.

Sub New_macro()

        Dim myRange As Range
        Set myRange = Selection

     Selection.Interior.Color = RGB(255, 192, 0)
 
    End Sub
    Sub New_macro2()

        Dim myRange As Range
        Set myRange = Selection

     Selection.Interior.Color = RGB(0, 176, 240)
 
    End Sub
    Sub New_macro3()

        Dim myRange As Range
        Set myRange = Selection

      Selection.Interior.Color = RGB(146, 208, 80)
 
    End Sub
    Sub New_macro4()

        Dim myRange As Range
        Set myRange = Selection

     Selection.Interior.Color = RGB(122, 48, 160)
 
    End Sub
    Sub New_macro5()

        Dim myRange As Range
        Set myRange = Selection

     Selection.Interior.Color = RGB(0, 112, 192)
 
    End Sub
    Sub New_macro6()

    Dim myRange As Range
         Set myRange = Selection

     Selection.Interior.ColorIndex = xlNone
     Selection.Clear
 
    End Sub
    Sub ColourSort()

    Dim myRange As Range
    Set myRange = Selection

    myRange.Select
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add(Selection, _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(255, _
            192, 0)
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add(Selection, _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 176 _
            , 240)
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add(Selection, _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(146, _
            208, 80)
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add(Selection, _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(122, 48 _
            , 160)
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add(Selection, _
            xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(0, 112 _
            , 192)
        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Selection() _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.ActiveSheet.Sort
                .SetRange Selection
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End Sub`


  [1]: https://i.stack.imgur.com/c6YTK.png
excel vba sorting excel-2010
1个回答
0
投票

我认为用

SortFields.Add(Selection, ...)
排序是不正确的。我认为您的
SortFields.Add
的键应该代表对数据进行排序的单个列。

例如这个:

        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Selection() _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

应该说类似的话

        ActiveWorkbook.ActiveSheet.Sort.SortFields.Add2 Key:=Range("A3:A13") _
            , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
© www.soinside.com 2019 - 2024. All rights reserved.