Excel VBA排序方法,运行时错误1004,"排序参考无效。确保它是whithin ..."

时间:2017-03-24 22:08:42

标签: excel vba excel-vba sorting

我正在尝试根据两种不同的条件对范围进行排序。 为了做到这一点,我录制了一个完美的宏。

当我尝试将宏代码的som替换为 我自己的变量等,代码不起作用,并给我几个不同的错误消息。

  1. 我得到的第一个是:"运行时错误438.对象不支持此属性或方法"

  2. 获得的其他错误消息是"运行时错误1004.排序参考无效。确保它在您要排序的数据中,并且第一个“排序方式”框不是相同或空白。"

  3. 以下是宏录制器的代码(可行):

    Sub CustomSort()
    ' CustomSort Macro
        Range("A1:H958").Select
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("A2:A958"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=Range("H2:H958"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Run Data from Notes").Sort
            .SetRange Range("A1:H958")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    

    我将代码更改为(无效并给我"运行时错误438"):

     Dim StatusRange As Range
        Dim PartNumber As Range
        Dim WholeRange As Range
        Dim wbkToRun As Workbook
        Dim NewData As Worksheet
        Dim LastRow As Long
    
        Set wbkToRun = ThisWorkbook
        Set NewData = Worksheets("Run Data from Notes")
        LastRow = NewData.Cells.Find("*", searchorder:=xlByRows, SearchDirection:=xlPrevious).Row
        Set WholeRange = NewData.Range("A2:H" & LastRow)
        WholeRange.Select
        ActiveWorkbook.NewData.Sort.SortFields.Clear
        wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        wbkToRun.NewData.Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
        With wbkToRun.NewData.Sort
            .SetRange WholeRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    

    使用宏录制器代码时,将范围更改为动态设置范围" WholeRange"它给我错误消息:"运行时错误1004.排序参考无效。确保它在您要排序的数据中,并且第一个“排序方式”框不是相同或空白。"

    WholeRange.Select
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets("Run Data from Notes").Sort.SortFields.Add Key:=WholeRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Run Data from Notes").Sort
            .SetRange WholeRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    

    它打破" .Apply"

    有人可以解释为什么我上面的两个代码不起作用吗? 我的代码和宏记录代码之间有什么区别。 谢谢。

1 个答案:

答案 0 :(得分:0)

代码中有很多错误。 首先,如所述@Comintern,您的范围对象NewData是每个自身的对象变量,它不是其父工作表的property。因此wbkToRun.NewDataActiveWorkbook.NewData无效VBA。

其次,排序时,key参数不能是多列范围。每个键应该是一列,或者只有一列的范围。

With NewData.Sort
    .SortFields.Clear
    .SortFields.Add key:=.Columns("A"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SortFields.Add key:=.Columns("H"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange WholeRange
    .header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With