我的Excel文档用作金属熔化文档。它用于混合各种合金。进行熔体时,我们将选择行并为行着色以指示熔体材料的选择。我有 5 个工作按钮,这是我们在任何时候打开的熔化极限。我还有一个排序按钮和一个空白按钮,用于在金属加工后从单元中去除颜色。消隐按钮还将删除突出显示的单元格中的数据。
我的问题在于,我可以使用 Excel 的自定义排序功能进行排序,但是,它需要用户输入并将其应用到定义的范围。当用户选择下一组范围时,这些输入将被删除。
我的排序函数设计为首先按单元格颜色按黄色、蓝色、绿紫色和深蓝色的顺序排序,然后对标识列单元格值进行排序。目前,我的排序按钮适用于单列。我希望行中的数据随着标识列移动。
所有文档的 VBA 脚本都在一个模块中,附在下面。
New_macro() - New_macro6() 用于为单元格着色,6 用于为 None 着色和清除单元格。
ColourSort() 是不起作用的排序函数 - 错误在这里 -
[![在此处输入图像描述][1]][1]
由于底部有一个统计行,我不想对列的整个长度进行排序...
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
我认为用
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