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



我有一张要用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列只有"关闭"或"打开"的值,而没有公式(,则相同的代码不会出错。

我也可以在Excel中手动对有公式的工作表进行排序,在那里效果很好。

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

  • 另一个问题有相同的错误代码,这是由于从另一个工作表调用子例程造成的。但是,这个子程序只是在模块中,而不是从另一个工作表中调用的
  • 查看了像这样和这样的在线教程,并尝试使用他们的代码来查看我是否有同样的问题

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

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

另外:您可能想先在With块中执行.SortFields.Clear。我不确定这是否能修复它,但它会删除任何以前存在的排序字段,这些字段可能被错误地指定了。

最新更新