如何使用变量进行Excel排序?

时间:2017-03-09 00:11:56

标签: excel vba excel-vba sorting

我正在尝试使用此代码进行排序:

Range(BRPdest).Activate
ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.clear
ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.Add Key:= _
Range("D12"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Batch Record Progress").sort
    .SetRange Range(ActiveCell.Column & ":12", ActiveCell.Column & ":125")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

我录制了一个宏并得到了它,但它有静态范围

我需要它来找到第一行应该做的相关列,

它应该将列从单元格12到125(或更少)排序,单元格中的数据格式为“A12345”

当代码到达.apply行时,它会抛出错误1004,我认为我的密钥可能有问题:(我也尝试将密钥设置为与具有相同错误的范围相同)

能否指出我做错了什么?

提前致谢

2 个答案:

答案 0 :(得分:0)

.Column属性返回列的数字索引,而不是您在Range引用中使用的字母。您可以使用(工作表).Cells(行,列)来使用数字行和列引用来引用单个单元格范围。

Range(BRPdest).Activate
ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.clear
ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.Add Key:= _
Range("D12"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Batch Record Progress").sort
    .SetRange Range(Cells(12,ActiveCell.Column), Cells(125,ActiveCell.Column))
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

如果您要排序的数据大小可能不同,您可能希望查找数据集中的最后一行,而不是依赖于固定的行号。

答案 1 :(得分:0)

感谢wedge和A.S.H的组合

我已经解决了它

    Range(BRPdest).Activate
    ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.clear
    ActiveWorkbook.Worksheets("Batch Record Progress").sort.SortFields.Add Key:= _
    Range(Cells(12, ActiveCell.Column), Cells(125, ActiveCell.Column)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Batch Record Progress").sort
        .SetRange Range(Cells(12, ActiveCell.Column), Cells(125, ActiveCell.Column))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

我必须将范围更改为建议的格式楔形,并在键中使用

非常感谢