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

标签 vba excel 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 列只有值“关闭”或“打开”,但没有公式),相同的代码可以正常工作。

我还可以使用公式在工作表上的 Excel 中手动执行排序,并且在那里工作正常。

我尝试过的其他故障排除步骤:
  • Another issue had the same error code ,这是由于从另一张表调用子例程所致。但是,此子例程只是在 Modules 中,而不是从另一个工作表中调用。
  • 通过在线教程检查,如 thisthis并尝试使用他们的代码查看我是否有同样的问题
  • 最佳答案

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

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

    另外:你可能想做.SortFields.Clear首先进入你的With堵塞。我不确定这是否会解决它,但它会摆脱任何以前存在的排序字段,这些字段可能指定不正确。

    关于对公式生成的值进行排序时,VBA 排序无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51428401/

    相关文章:

    excel - 如何将不同excel文件和工作表中的数据导入一个主excel文件

    c++ - 如何允许用户输入数组索引以及数组的值?

    vba - 如何用对象来引用

    excel - 如何在 VBA 中声明全局变量?

    excel - VBA Excel 2007 : Need to loop copy and loop count number except zero every row above

    vba - 连接公式中的粗体文本

    java - 按自然顺序比较字符串但忽略字符串的前缀

    ios - 如何对包含 NSDates 的数组进行排序

    excel - 对象 'Names' 的方法 '_Application' 失败

    excel - #NUM!用户定义函数错误