按特定列排序区域

时间:2019-02-03 10:52:47

标签: excel vba function sorting

我正在尝试构建一个将输入以下内容的函数:
i)工作表
ii)分拣区
iii)排序列标题(此列中有日期)。

然后,代码将按升序对区域进行排序。

Function sortArea(Sheet As Worksheet, sortingArea As Range, sortingColHeader As Range) As Range

With Sheet.sort
    .SortFields.Add Key:=Range(sortingColHeader), Order:=xlAscending
    .SetRange Range(sortingArea)
    .Header = xlYes
    .Apply
End With

End Function

我写的时候,在我的主要子目录中:

Call sortArea(Sheets(2), Range("A16:AP45"), Range("I14"))

我得到:

  

“对象全局的运行时错误1004方法范围失败”

With块内的第一行:

.SortFields.Add Key:=Range(sortingColHeader), Order:=xlAscending

1 个答案:

答案 0 :(得分:0)

检查差异:

Option Explicit

Sub sortArea(ws As Worksheet, sortingArea As Range, sortingColHeader As Range)

With ws.Sort
    .SortFields.Clear
    .SortFields.Add Key:=sortingColHeader, Order:=xlDescending
    .SetRange sortingArea
    .Header = xlYes
    .Apply
End With

End Sub

Sub tester()
Call sortArea(Sheets(2), Range("b1:c10"), Range("b1:b10"))
End Sub
  • 使用Sub代替Function。您要对工作表执行操作。通常,函数会将结果返回给调用方。
  • 排序键被描述为代表整个列的范围,而不是单个单元格。
  • Range(Range)语法没有意义。
  • 忽略order参数中仅用于测试的更改

  • 请注意.SortFields.Clear,否则每次运行宏时,您只需不断添加SortFields

出于文档考虑,请考虑将sortingColHeader更改为sortingColRange