Excel 2007 到 Excel 2003 VBA"排序"问题



我继承了一个 excel 电子表格,当它在 excel 2007 上运行时工作正常。 问题是它所在的计算机死了,新机器只有Excel 2003 - 电子表格不再正常工作。 问题是一些VBA代码中的"排序"功能。

想知道 anyoe 是否知道我是否可以将其更改为在 excel 2003 中工作? 我看过类似的帖子,但在 vba 方面我完全是新手 - 我只是在寻找一个简单的"复制和粘贴"解决方案 - 用 2007 位替换 2003 位。 其他一切都有效。

这是代码 -

'Sort by Class then by Entry No
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Add Key _
    :=Range(ClassRange1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort.SortFields.Add Key _
    :=Range("A9:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
With ActiveWorkbook.Worksheets("Competitor & Class Entry").Sort
    .SetRange Range("A9:AE308")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

任何帮助非常感谢!(以及如何插入它!

我的建议是对要排序的数据使用一次宏录制器,并修改保存的代码以满足您的需求。

不确定是否需要,但是在代码中使用了3次,您在不指定工作表的情况下使用范围:

ActiveWorkbook.Worksheets("Competitor & Class Entry").

以前

:=Range("A9:A308"), SortOn:=

.SetRange Range("A9:AE308")
.Add Key :=Range(ClassRange1)

无论如何,我会用:

Dim Sh as worksheet
set sh=ActiveWorkbook.Worksheets("Competitor & Class Entry")
with Sh.Sort
    with .SortFields
        .Clear
        .Add Key :=SH.Range(ClassRange1), SortOn:=xlSortOnValues, Order:=xlAscending, _
                    DataOption :=xlSortNormal
        .Add Key :=sh.Range("A9:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, _
                    DataOption :=xlSortNormal
    end with
    .SetRange sh.Range("A9:AE308")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
set Sh=nothing

以下内容应该有效。我猜他们在 Excel 2007 中添加了一个新的排序函数。

With ActiveWorkbook.Worksheets("Competitor & Class Entry")
    .Range("A9:AE308").Sort Key1:=.Range(ClassRange1), Order1:=xlAscending, Key2:=.Range( _
        "A9:A308"), Order2:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End With

最新更新