在VBA排序中设置范围

时间:2015-03-03 16:41:37

标签: excel vba sorting excel-vba set

我正在尝试在Excel VBA中对数据进行排序。我的工作表可能有不同数量的数据,因此我使用Range.End方法查找工作表的最后一行/列。但是,当我尝试设置排序的范围时,它给了我一个Object Required错误,我不知道为什么。我在下面粘贴了我的代码。任何帮助将不胜感激。

With Sheet9.Sort
    .SetRange (Sheet9.Range("A1").CurrentRegion)
    .SortFields.Clear
    .SortFields.Add Key:=rng2, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

1 个答案:

答案 0 :(得分:1)

基于评论编辑:

我将下面的代码输入到我创建的模拟电子表格中,似乎工作正常。注释中描述的错误:Sort Reference is not valid表示定义密钥可能存在问题。尝试使用我的代码(替换必要的信息)并让我知道它是否有效。

Sub Doit()

    Set rng2 = Sheet1.Range("A1:A5")

    With Sheet1.Sort
        .SortFields.Clear
        .SortFields.Add Key:=rng2, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Sheet1.Range("A1").CurrentRegion
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

基于对行和列使用.End的能力,我假设您有一个连续的数据集。如果是这样,只需使用:

,而不是使问题复杂化

Range("A1").CurrentRegion设置您的范围对象。

这可以识别围绕Range("A1")

构建的整个数据集