我继承了一个 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