2012-08-23 163 views
1

我正在嘗試進行多級排序宏,而行數是動態的。我一直在搞一些測試數據,試圖讓它起作用,但是我一直從Excel中獲得1004個運行時錯誤。希望第二雙眼睛能幫助解決這個問題。使用動態範圍和customOrder excel對宏進行排序

下面是測試數據

A  B  C  D 
Num Status Junk Junk 
1 Open 1  1 
2 Open 2  2 
3 Closed 3  3 
3 Open 3  3 
4 Open 4  4 
6 Open 6  6 
8 Open 8  8 
8 Open 8  8 
34 Open 34  34 
456 Open 456  456 
5 Closed 5  5 
853 Open 853  853 
2345Closed 2345 2345 
234 Open 234  234 
23 Closed 23  23 
4 Open 4  4 
76 Closed 76  76 
345 Open 345  345 
623 Closed 623  623 
523 Open 523  523 
4525Closed 4525 4525 
6 Open 6  6 

這裏是我的宏

Range("A1:D1").Select 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add _ 
    Key:=Range("B1:B10"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ 
    "Open,Closed", DataOption:=xlSortNormal 
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add _ 
    Key:=Range("A1:A10"), SortOn:=xlSortOnValues, Order:=xlAscending,   DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Sheet1").Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

而且看到我有範圍的線( 「A1:A10」),希望A10是最後一次行。所以我不確定要放在那裏。

感謝所有,

吉姆

+2

Excel的錯誤1004意味着你的VBA代碼拋出一個錯誤,但是你忽略了與錯誤處理程序來捕獲它。你應該總是在Excel VBA中有一個錯誤處理程序,以避免這個問題和其他許多問題。在錯誤處理程序中放入一個'ON ERROR ...'語句,然後像'MsgBox'錯誤#「&Err.Number&」:「&Err.Description,vbOKOnly'這樣的語句來查看你的實際錯誤是什麼。 – RBarryYoung

回答

2

將您的最後一行到一個變量,然後使用該變量的範圍名稱,就像我以下步驟進行。我還清理了一下你的代碼,使它更易於閱讀和更高效。你越來越運行時錯誤,因爲你錯過了SetRange方法:

Sub mySort() 

Dim lngLast As Long 
lngLast = Range("A" & Rows.Count).End(xlUp).Row 

On Error Go to Whoa! 'in honor of Siddhart Rout (I like that :)) 
With Worksheets("Sheet1").Sort 
    .SortFields.Clear 
    .SortFields.Add Key:=Range("B1:B" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ 
     "Open,Closed", DataOption:=xlSortNormal 
    .SortFields.Add Key:=Range("A1:A1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    .SetRange Range("A1:D" & lngLast) 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

On Error Go To 0 
Exit Sub 

Whoa!: 
    Msgbox "Error " & Err.Number & " " & Err.Description, vbOkOnly 

End Sub 
+1

好,但Excel VBA外部入口點應始終有一個錯誤處理程序。 – RBarryYoung

+0

獲取運行時間438對象不支持''.SortRange範圍(「A1:D」&lngLast)' – Jim

+0

+1行中的方法錯誤。 @RBarryYoung好點。我正在編輯它。 –