2

我在 Excel 2016 上录制了一个适用于 2 列排序的宏。

我在 Excel 2010 上收到以下错误。

错误 438。对象不支持此属性或方法。

2010 版 Excel 不能接受什么?

Sub SortOpenOrder()
'
' Macro1 Macro
'

'
    Range("Table2[[#Headers],[Customer No.]]").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("Open Orders").ListObjects("Table2").Sort.SortFields. _
        Clear
    ActiveWorkbook.Worksheets("Open Orders").ListObjects("Table2").Sort.SortFields. _
        Add2 Key:=Range("Table2[Customer No.]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Open Orders").ListObjects("Table2").Sort.SortFields. _
        Add2 Key:=Range("Table2[PO '#]"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Open Orders").ListObjects("Table2").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("Table2[[#Headers],[Customer No.]]").Select
End Sub
4

1 回答 1

2

您拥有的代码看起来不会在任一版本的 Excel 上爆炸,但重构它以获得更好的编码实践肯定会有所帮助(正如 fabio 所暗示的那样)。

尝试这个:

Dim myTable as ListObject
Set myTable = ThisWorkbook.Worksheets("Open Orders").ListObjects("Table2")

With myTable.Sort

    With .SortFields
         .Clear
         .Add Key:=myTable.ListColumns("Customer No.").DataBodyRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         .Add Key:=myTable.ListColumns("PO '#").DataBodyRange, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With

   .Header = xlYes
   .MatchCase = False
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply

End With
于 2018-10-02T21:17:48.603 回答