Excel 2013 VBA使用连续的列对大型范围进行排序



我试图研究为什么这不起作用,但是我撞到了墙,因为据我所知,我的代码应该做到这一点。..

我的情况是,我正在构建电子表格,以简化我办公室的预算报告过程。由于我是唯一对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

最新更新