VBA对表进行排序并忽略总行

时间:2013-12-14 17:54:37

标签: excel vba excel-vba excel-2010

我的范围Table3如下所示:

enter image description here

这些行不是固定的,可以增加或减少,因此我已将其创建为表Table3以适应此行为,因此我可以在VBA中将其用作ListObjects。< / p>

下面的VBA用于对表进行排序,但由于Totals是范围的一部分,因此排序无法按预期工作。


Sub sort()

    ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort.SortFields _
        .Clear
    ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort.SortFields _
        .Add Key:=Range("Table3[Description3]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

在应用排序之前,有人可以帮助修改代码以忽略Totals行(即仅包括header下方和Totals行之上的范围)

修改

目前,这是我尝试重新定义没有最后一行的新范围

Sub sort()

Dim resizedTable As ListObject
Set resizedTable = Sheets("Sheet1").ListObjects("Table1")
With resizedTable
.Resize .Range.Resize(.Range.Rows.Count - 1, .Range.Columns.Count)
End With


    resizedTable.sort.SortFields.Clear
    resizedTable.sort.SortFields _
        .Add Key:=Range("resizedTable[Description]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
   
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply

End Sub

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

为您的表格设置一个新范围,只需缩短一行»totalRowCount - 1 在这里,x是您的输入范围

Set x = Range(x.Cells(1, 1), x.Cells(x.Rows.Count - 1, x.Columns.Count))

或使用调整大小方法

Sub CutOffLastLine()
    With ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3")
        .Resize .Range.Resize(.Range.Rows.Count - 1, .Range.Columns.Count)
    End With
End Sub