我一直在编写这个VBA代码,以帮助我对我拥有的信息数据库(名称,发票号,地址等)进行排序。我最近学会了如何在不选择工作表中的实际范围的情况下对VBA进行排序,并且我尝试使用多个键(key1,key2,key3)进行排序,但没有运气。我一直收到运行时错误450:运行此代码时参数数量错误或属性分配无效。我希望能够多次对一系列数据进行排序,例如按F列排序范围(A:K),然后按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
这很奇怪,因为起初我尝试运行前2个键(key1,key2)并且它工作得非常好,然后我复制并粘贴以创建下一个键(key3)并出现错误。当我尝试调试时,上面的所有代码都会突出显示。
我能想到的另一种方法是运行在工作表中选择范围(A:K)的代码,但我不想这样做。
答案 0 :(得分:1)
看起来你正在尝试重做一些录制的宏代码。录制的{{3}}的录制代码非常详细。以下是您应该要求的所有内容。
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列的主要排序。
请注意,使用此方法最多可以设置三列以进行主要排序和次要排序。如果您需要更多,请先对它们进行排序,然后对最后三个流行列进行后续排序。