在对公式产生的值进行排序时,VBA排序无法正常工作

时间:2018-07-19 17:10:39

标签: vba excel-vba sorting

我有一张要使用VBA排序的值。我想按特定标题的降序排列(反向字母顺序)。我的工作表如下所示:

   A            B            C
1  Date Opened  Date Closed  Status
2  07/12/17     07/15/17     closed
3  07/16/17                  open

计算列C的值,因此,如果“关闭日期”列中没有任何内容,则状态将自动设置为“打开”。

我想使用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列仅具有值“ closed”或“ open”,但没有公式),则相同的代码也不会出错。

我还可以在带有公式的工作表上用Excel手动执行排序,在这里工作正常。

我尝试过的其他故障排除步骤:

  • Another issue had the same error code,这是由于从另一张纸调用了子例程。但是,此子例程仅在模块中,而不会从另一个工作表中调用。
  • 通过thisthis之类的在线教程进行了检查,并尝试使用它们的代码来查看是否存在相同的问题

1 个答案:

答案 0 :(得分:2)

我从不喜欢使用ActiveSheet.Sort,更喜欢使用更明确的Range.Sort。这似乎对我有用:

Range("A1:C3").Sort Range("C1"), xlDescending, Header:=xlYes

也:您可能想先在.SortFields.Clear块内执行With。我不确定是否可以解决此问题,但是它会摆脱以前可能不正确指定的所有排序字段。