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

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

这里是我用来sorting我的列的代码:

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 

这很奇怪,因为起初我试着运行前2个键(key1,key2),它工作得很好,然后我复制并粘贴下来创build下一个键(key3),并出现错误。 当我尝试debugging时,上面的所有代码都被突出显示。

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

看起来你正在尝试重写一些logging的macros代码。 logging的Range.Find方法的logging代码非常冗长。 这是你应该要求的一切。

 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,一次不能在多个字段上执行自定义sorting。 在这种情况下,执行三种types,每种都有一个Ordercustom:=1但要记得按相反顺序执行; 例如首先是D列,然后是E,最后是列F上的主要sorting。

请注意,最多有三列可用此方法设置主要sorting和次要sorting。 如果您需要更多,请先sorting,然后对最后三个stream行列进行后续sorting。