VBA中多键的排序运行时错误450:参数数量错误或无效的属性分配



我一直在写这个VBA代码来帮助我排序信息的数据库我有(名称,发票#,地址等)。我最近学会了如何在VBA中排序,而不选择工作表中的实际范围,我尝试用多个键(key1, key2, key3)排序,但没有运气。我一直得到一个运行时错误450:错误的参数数量或无效的属性分配时,运行这段代码。我希望能够对一个数据范围进行多次排序,例如对一个范围(a:K)按列F排序,然后按列E排序,然后按列B排序,等等。

这是我一直用来排序我的列的代码:

ActiveSheet.Range("A:K").Sort _
Key1:=ActiveSheet.Range("F2"), Order1:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
Key2:=ActiveSheet.Range("E2"), Order2:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption2:=xlSortNormal, _
Key3:=ActiveSheet.Range("D2"), Order3:=xlAscending, HEADER:=xlYes, Ordercustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption3:=xlSortNormal

这很奇怪,因为一开始我试着运行前两个键(key1, key2),它工作得很好,然后我复制并粘贴下来创建下一个键(key3),错误出现了。当我试着调试时,上面所有的代码都会被高亮显示。

我能想到的唯一另一种方法是运行在工作表中选择范围(A:K)的代码,但我不想这样做。

看起来您正在尝试重新编写一些记录的宏代码。已记录范围的已记录代码。Find方法非常冗长。这是你所需要的。

With Sheets("Sheet1")
    With Intersect(.Range("A1").CurrentRegion, .Range("A:K"))
        .Cells.Sort Key1:=.Columns(6), Order1:=xlAscending, _
                    Key2:=.Columns(5), Order2:=xlAscending, _
                    Key3:=.Columns(4), Order3:=xlAscending, _
                Orientation:=xlTopToBottom, Header:=xlYes
    End With
End With

TBH,我不知道您是否可以简单地将Ordercustom:=1添加到每行。在IIRC中,一次不能对多个字段执行自定义排序。在这种情况下,执行三次排序,每次排序都有一个Ordercustom:=1,但请记住以相反的顺序执行;例如,首先是列D,然后是列E,最后是列f的主排序

请注意,此方法最多有三列可设置主排序和辅助排序。如果需要更多,请先对这些列进行排序,然后对最后三个流行列进行后续排序。

最新更新