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
4

2 回答 2

0

我不太确定排序,但要计数,请尝试:

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

此外,在定义第一个排序条件时,您似乎在 Range 语句中有三个“”:

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
于 2013-06-12T12:54:32.317 回答
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
于 2013-06-13T13:32:01.220 回答