我试图研究为什么这不起作用,但是我撞到了墙,因为据我所知,我的代码应该做到这一点。..
我的情况是,我正在构建电子表格,以简化我办公室的预算报告过程。由于我是唯一对Excel有一半理解的人,因此我想使其成为其他用户的脑力且简单。为此, vba进行救援!,它将照顾进口数据并仅一键为我完成所有分类。
进口数据宽24列,年底可能会增长多达2500行。一旦导入数据,我就需要用mulitple列类型进行排序,一个又一个又一个地。所以: - 导入数据 - 按日期排序 - 按转移类型排序 - 按计费预算排序 - etc(总共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
刷新所有将重新从导入文件中提取,以确保电子表格是最新的。然后,我必须对所有内容进行整理。多亏了本文底部的出色响应,我了解了使用范围名称,此页面向我展示了如何参考其他工作表。
这是问题:只有第一个键才能正常工作。该代码不会丢弃错误,不会停止,出现可以正确执行。但是,只有第一个类型的论点才能行动。无论我输入哪个范围作为第一个键,也不是我输入的范围,只有第一个被排序。
有人可以帮助我找出我在做什么错吗?
预先感谢!
我已经修改了您的代码以使用适当的语法。注意差异。
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
看起来似乎是多余的,但是如果您将多种不同的方式应用于同一床单,则可以节省一些头痛。
我不知道为什么您的代码在我的计算机上不起作用,因为它在我的计算机上正常工作。(不过,i am 运行Excel 2007。)
实际上,所有三种适当的方法(在五个总共中)可以对我进行excel的工作。
这是您尚未见过的,使用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
有您的版本。(我已经稍作修改了,但在功能上仍然是等效的。)
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
最后,使用 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