Excel 2013 VBA使用连续的列对大范围进行sorting

我试图研究为什么这不起作用,但我已经打了一堵墙,因为据我所知,我的代码应该是做的伎俩… …

我的情况是,我正在构build一个电子表格,以简化我办公室的预算报告stream程。 因为我是唯一一个对Excel有一个半正式理解的人,所以我想把它作为braindead,对于其他用户来说是简单的。 为此, VBA来拯救! 因为它会照顾导入数据,并做我所有的sorting(他们)只需点击一下。

导入的数据是24列宽,到年底可能增长到2500行。 一旦数据被导入,我需要依次排列多个列types。 所以: – 导入数据 – 按datesorting – 按交易typessorting – 按照收费预算sorting – 等等(共6种)

这是我目前的代码:

Sub RefreshAll() Workbooks(ThisWorkbook.Name).RefreshAll With Worksheets("Detailed Budget Report") .Range("RC_number").CurrentRegion.Sort _ key1:=Range("Sort_1st"), order1:=xlAscending, _ key2:=Range("Sort_2nd"), order2:=xlAscending, _ Header:=xlYes End With End Sub 

刷新全部从导入文件中重新获取,以确保电子表格是最新的。 然后,我必须整理一下。 感谢这篇文章底部的精彩回应,我学习了使用范围名称, 本页向我展示了如何引用其他工作表。

这是问题:只有第一个sorting键正在工作。 代码不会抛出错误,它不会停止,它似乎执行正确。 但是,只有第一类的论据才会被采纳。 不pipe我input第一个键的范围是多less,也不是第二个input的范围,只有第一个sorting。

任何人都可以帮我弄清楚我做错了什么?

提前致谢!

我修改了你的代码来使用正确的语法。 注意不同之处。

 Sub RefreshAll() Workbooks(ThisWorkbook.Name).RefreshAll With Worksheets("Detailed Budget Report").Sort .SortFields.Clear .SortFields.Add Key:=Range("Sort_1st"), Order:=xlAscending .SortFields.Add Key:=Range("Sort_2nd"), Order:=xlAscending .SetRange Range("RC_number") .Header = xlYes .Apply End With End Sub 

提醒: .SortFields.Clear看起来可能是多余的,但如果你在同一张纸上应用多种不同的sorting,它可以节省一些头痛。

我不知道为什么你的代码不能在你的计算机上工作,因为它在我的工作完美。 (虽然我正在运行Excel 2007)。

实际上,在Excel中执行sorting的所有三种适当的方法(总共五种)对我来说工作得很好。

这是你还没有看到,使用AutoFilter.Sort

 Sub RefreshAll_RS() Workbooks(ThisWorkbook.Name).RefreshAll With ActiveWorkbook.Worksheets("Detailed Budget Report") .Range("RC_number").CurrentRegion.AutoFilter .Range("RC_number").Select With .AutoFilter.Sort .Header = xlYes .SortFields.Add Key:=Range("Sort_2nd"), Order:=xlAscending .Apply .SortFields.Clear .SortFields.Add Key:=Range("Sort_1st"), Order:=xlAscending .Apply End With .Range("RC_number").CurrentRegion.AutoFilter End With End Sub 

然后是你的版本,使用Range.Sort 。 (我已经稍微修改了它,但function上仍然相同。)

 Sub RefreshAll_Q1() Workbooks(ThisWorkbook.Name).RefreshAll With Worksheets("Detailed Budget Report").Range("RC_number").CurrentRegion .Sort _ key1:="Sort_1st", order1:=xlAscending, _ key2:="Sort_2nd", order2:=xlAscending, _ Header:=xlYes End With End Sub 

最后,还有Joshua的版本,使用Worksheet.Sort 。 (我已经修复了不正确的.SetRange参数错误,所以现在可以工作。)

 Sub RefreshAll_A1() Workbooks(ThisWorkbook.Name).RefreshAll With Worksheets("Detailed Budget Report").Sort .SortFields.Clear .SortFields.Add Key:=Range("Sort_1st"), Order:=xlAscending .SortFields.Add Key:=Range("Sort_2nd"), Order:=xlAscending .SetRange Range("RC_number").CurrentRegion .Header = xlYes .Apply End With End Sub