2016-09-16 816 views
2

我一直在寫這個VBA代碼來幫助我對信息的數據庫進行排序(名稱,發票#,地址等)。我最近學會了如何在VBA中進行排序,而無需在工作表中選擇實際的範圍,並且我嘗試使用多個鍵(key1,key2,key3)進行排序,但沒有運氣。我不斷收到運行時錯誤450:運行此代碼時參數數量錯誤或屬性賦值錯誤。我希望能夠多次對一系列數據進行排序,例如按F列排序一個範圍(A:K),然後按E,然後按B等。在VBA中排序多個鍵;運行時錯誤450:錯誤的參數數量或無效的屬性分配

這是我一直在使用的代碼排序我的專欄:

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個密鑰(密鑰1,密鑰2)和它的工作完全沒有問題,然後我複製並粘貼到創建下一個鍵(KEY3 ),並出現錯誤。當我嘗試調試時,上面的所有代碼都被突出顯示。

我能想到的唯一的另一種方式是在工作表中選擇範圍(A:K)的地方運行代碼,但我不想那樣做。

+1

您正在爲「HEADER」,「OrderCustom」和「方向」多次指定參數。我會嘗試首先刪除重複的參數。請參閱參數列表[這裏](https://msdn.microsoft.com/en-us/library/office/ff840646.aspx)。 – Comintern

+1

我會先錄製一個可以做你想要的排序的宏。複製代碼並粘貼到這裏進行比較,或者可能會有足夠的信息,以便您自己修復它 – dbmitch

回答

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

請注意,使用此方法最多有三列來設置主要排序和次要排序。如果您需要更多,請先排序,然後對最後三個流行列進行後續排序。

+0

如果您願意提供'自定義排序',那麼我可以實際對照樣本數據進行測試。沒有自定義排序順序的細節,任何提供的響應都是有點猜測的。 – Jeeped

+0

非常感謝您的回答!我試過你的上面的代碼,它完美的工作。這絕對是重複參數的問題。 – Konrad

相關問題