【发布时间】:2018-07-20 01:38:53
【问题描述】:
我有一张要使用 VBA 排序的值。我想按特定标题按降序(反向字母顺序)对它们进行排序。我的工作表如下所示:
A B C
1 Date Opened Date Closed Status
2 07/12/17 07/15/17 closed
3 07/16/17 open
计算C列的值,如果“Date Closed”列中没有任何内容,则状态自动设置为“open”。
我想使用 VBA 按字母倒序按 C 列对表格进行排序,以便打开的票证出现在关闭的票证之前。这是我正在尝试使用的 VBA:
Sub Sort_Status()
With ActiveSheet.Sort
.SetRange Range("A1:C3")
.SortFields.Add Key:=Range("C2:C3"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With
End Sub
如果我在包含公式的数据表上运行它,我会收到错误:1004: The sort reference is not valid. Make sure that it's within the data you want to sort, and the first Sort By box isn't the same or blank.
但是,如果我将这些值粘贴到新工作表中(例如,使 C 列只有值“关闭”或“打开”,但没有公式),相同的代码可以正常工作。
我还可以使用公式在工作表上手动执行 Excel 排序,它在那里工作正常。
我尝试过的其他故障排除步骤:
- Another issue had the same error code,这是由于从另一张表调用子程序。但是,此子例程只是在 Modules 中,不会从另一个工作表中调用。
- 查看了this 和this 等在线教程,并尝试使用他们的代码查看我是否有同样的问题
【问题讨论】:
-
是的,刚刚测试过。稍等片刻。
-
显然,第 1 步只是记录一个手动执行的宏,并在需要时修改宏:)
-
是的,这实际上是我开始的地方,我一直在从那里剥离代码。它适用于录制的版本,但某处出了点问题。
-
您可能希望首先在您的
With块中执行.SortFields.Clear。我不确定这是否会解决它,但它会删除任何以前存在的排序字段,这些字段可能指定不正确。 -
必须来自以前的调试尝试。规则是按顺序添加的,直到/除非您尝试
.Apply,否则不会引发错误,在这种情况下,单个错误规则将导致该错误。