2013-06-12 44 views
0

我想在vba(在一個較大的宏中間)由兩個級別排序表。我試圖錄制宏,正是我想要的,但範圍僅限於這一系列數據。範圍的結束可以改變,所以我添加了一個計數器的代碼,基本上告訴我在哪裏範圍結束使用計數器來確定範圍的兩列的排序

我下面是我的代碼的簡化版本(我將計數器設置爲200,以簡化事情,但這將改變我的代碼)

我想要的是按列C和列A排序範圍(「A1」,AB「& counterT),所以如果有一個更簡單的方法來做到這一點(我假設)我可以自由地忽略我的代碼

我暫停了我的代碼(你會注意到下面)來突出顯示真正給我帶來麻煩的部分,但我不完全相信如果我修復那部分該代碼仍然會工作,這可能只是當前的問題,而不是整個問題。 謝謝你的幫助!

Sub Sort 

Dim counterT As Long 
counterT = 200 

Dim rDataToSort As Range, rSortData As Range 

Set rSortData = Range("C4", C" & CounterT) 

Set rDataToSort = Range("A4", AB" & CounterT) 

我在這裏暫停代碼原因我不知道如何添加第二級(A列)這裏

With ActiveWorkbook.Worksheets("Output").Sort 

.SortFields.Clear 
.SortFields.Add Key:=rSortData, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
.SetRange rDataToSort 
.Header = xlNo 
.MatchCase = False 
.Orientation = xlTopToBottom 
.SortMethod = xlPinYin 
.Apply 

End With 

回答

0

得到它...它比我想象哈哈這是除了從有必要假設代碼「櫃檯容易得多已經定義和設置

Workbooks("ChainRetailerMacro.xlsm").Worksheets("sheet4").Range("A1", "U" & counter).Sort _ 
key1:=Sheets("sheet4").Range("A1", "A" & counter), order1:=xlAscending, _ 
key2:=Sheets("sheet4").Range("C1", "C" & counter), order2:=xlAscending, _ 
Header:=xlYes 
End Sub 
0

我對排序不太確定,但對於計數,嘗試:

Counter = WorksheetFunction.Count(Range("A:A")) 

另外,確定第一個排序條件時,你似乎有三個批次的「在範圍聲明:

Range("C2: ("C" & counter)) 

最後,你可以嘗試通過排序條件循環:

Dim rangeID As Variant 
with ActiveWorkbook.Worksheets("Sheet4").Sort 
    .SortFields.Clear 
    For Each rangeID In Array("C2: (C" & counter), "A2:A1512") 
     .SortFields.Add Key:- .Range(rangeID), SortOn........ 
    Next 
.setrange range("A:C") 
.header = xlYes 
end with 
+0

對不起,關於我最初的問題,它不是很清楚。我編輯我的代碼以反映我期望的實際範圍(因爲之前他們錯了)。通過排序條件的循環是有道理的,我認爲它會起作用,但我似乎無法將你的代碼轉換成可運行的東西,請你詳細說明一下(我不明白在「 ......「部分),它也給我在」鍵: - 「部分上的錯誤,我認爲這部分是因爲短劃線。再次感謝您的幫助 –