Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中对多个键进行排序;运行时错误450:参数数目错误或属性分配无效_Vba_Excel_Sorting_Runtime Error - Fatal编程技术网

在VBA中对多个键进行排序;运行时错误450:参数数目错误或属性分配无效

在VBA中对多个键进行排序;运行时错误450:参数数目错误或属性分配无效,vba,excel,sorting,runtime-error,Vba,Excel,Sorting,Runtime Error,我一直在编写这个VBA代码,以帮助我对数据库中的信息(姓名、发票、地址等)进行排序。我最近学习了如何在VBA中排序而不选择工作表中的实际范围,并尝试使用多个键(键1、键2、键3)进行排序,但没有成功。我一直收到一个运行时错误450:运行此代码时参数数量错误或属性分配无效。我希望能够对一个数据范围进行多次排序,例如,按F列、E列、B列对一个范围(a:K)进行排序 以下是我用于对列进行排序的代码: ActiveSheet.Range("A:K").Sort _ Key1:=ActiveSheet.R

我一直在编写这个VBA代码,以帮助我对数据库中的信息(姓名、发票、地址等)进行排序。我最近学习了如何在VBA中排序而不选择工作表中的实际范围,并尝试使用多个键(键1、键2、键3)进行排序,但没有成功。我一直收到一个运行时错误450:运行此代码时参数数量错误或属性分配无效。我希望能够对一个数据范围进行多次排序,例如,按F列、E列、B列对一个范围(a:K)进行排序

以下是我用于对列进行排序的代码:

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)的位置运行代码,但我不想这样做。

看起来您正在尝试重新编写一些录制的宏代码。录制的文件的录制代码非常冗长。这是你所需要的一切

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
,但要记住按相反的顺序进行排序;e、 g.首先是D列,然后是e列,最后是F列的主要排序


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

您多次为
标题
订单自定义
方向
指定参数。我会先尝试删除重复的参数。请参阅参数列表。我首先录制一个宏,该宏的排序符合您的要求。在这里复制并粘贴代码以进行比较,或者它可能会提供足够的信息,以便您自己修复它。如果您愿意提供“自定义排序”,那么我可以根据示例数据实际测试它。如果没有自定义排序顺序的详细信息,任何提供的响应都只是一种猜测。非常感谢您的回答!我试过你上面的代码,它工作得很好。这肯定是一个重复参数的问题。