【问题标题】:Sorting Multiple Keys in VBA; Runtime Error 450: Wrong number of arguments or invalid property assignment在 VBA 中对多个键进行排序;运行时错误 450:参数数量错误或属性分配无效
【发布时间】:2016-09-16 03:18:43
【问题描述】:

我一直在编写这个 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) 的代码,但我不想这样做。

【问题讨论】:

  • 您为HEADEROrderCustomOrientation 多次指定参数。我会先尝试删除重复的参数。查看参数列表here
  • 我会先录制一个你想要的宏。复制并粘贴代码在这里进行比较,或者它可能是足够的信息,所以你可以自己修复它

标签: vba excel sorting runtime-error


【解决方案1】:

您似乎正在尝试修改一些录制的宏代码。记录的Range.Find method 的记录代码非常冗长。这就是您所需要的一切。

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 列的主排序。

请注意,使用此方法最多可以设置三列主要排序和次要排序。如果您需要更多,请先对它们进行排序,然后对最后三个常用列进行后续排序。

【讨论】:

  • 如果您愿意提供“自定义排序”,那么我实际上可以针对样本数据进行测试。如果没有自定义排序顺序细节,任何提供的响应都是猜测。
  • 非常感谢您的回答!我试过你上面的代码,它工作得很好。这绝对是重复参数的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-27
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多