【问题标题】:Excel Macro to perform multi column sortExcel 宏执行多列排序
【发布时间】:2018-04-30 23:31:57
【问题描述】:

我正在尝试在 Excel 中创建一个宏,该宏将按 A、C 和 F 列对电子表格进行排序。我在网上找到了一些信息来帮助我入门。下面是代码。我面临的挑战是,电子表格每天将包含不同数量的行。 (列将始终相同,但行数会改变)。只要电子表格不包含超过 9999 行(包括列标题),下面的脚本就会对我的数据进行排序。如果我有 10,000 行或更多行,则宏将失败。

如何更新以下代码以使其运行而不管行数如何?您可以提供的任何帮助将不胜感激。谢谢

Sub Multi_Sort()
'
' Multi_Sort Macro
'
Dim lngLast As Long
lngLast = Range("A" & Rows.Count).End(xlUp).Row

With Worksheets("Sheet1").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Range("A1:A1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("C1:C1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Range("F1:F1" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    .SetRange Range("A1:F" & lngLast)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

【问题讨论】:

  • “宏失败”是什么意思?
  • 我收到运行时错误“1004”:
  • 对象'_Global'的方法'范围'失败

标签: excel vba


【解决方案1】:

我无法在 Excel 2013 中复制您的错误,但我猜您的范围分配中多余的“1”是问题所在(即,将 =Range("A1:A1" & lngLast) 更改为 =Range("A1:A" & lngLast) 等)。

此外,一个好的做法是在您的范围调用中明确说明(包括工作表)。

Sub Multi_Sort()

Dim lngLast As Long
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Sheet1")
lngLast = ws.Range("A" & .Rows.Count).End(xlUp).Row

With .Sort
    .SortFields.Clear
    .SortFields.Add Key:=ws.Range("A1:A" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=ws.Range("C1:C" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=ws.Range("F1:F" & lngLast), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    .SetRange ws.Range("A1:F" & lngLast)
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub

【讨论】:

  • 好地方。我怀疑宏是在 Excel 2003 上运行还是在兼容模式下运行,当 lngLast 大于 10,000 时,结果范围将是 A1:A110000 (A1:A1 + 10000) - 这是旧版 Excel 无法处理的。
猜你喜欢
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多