【问题标题】:VBA sort not working properly when sorting on values that are produced by formula对公式生成的值进行排序时,VBA 排序无法正常工作
【发布时间】: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 中,不会从另一个工作表中调用。
  • 查看了thisthis 等在线教程,并尝试使用他们的代码查看我是否有同样的问题

【问题讨论】:

  • 是的,刚刚测试过。稍等片刻。
  • 显然,第 1 步只是记录一个手动执行的宏,并在需要时修改宏:)
  • 是的,这实际上是我开始的地方,我一直在从那里剥离代码。它适用于录制的版本,但某处出了点问题。
  • 您可能希望首先在您的With 块中执行.SortFields.Clear。我不确定这是否会解决它,但它会删除任何以前存在的排序字段,这些字段可能指定不正确。
  • 必须来自以前的调试尝试。规则是按顺序添加的,直到/除非您尝试.Apply,否则不会引发错误,在这种情况下,单个错误规则将导致该错误。

标签: vba excel sorting


【解决方案1】:

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

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

另外:您可能希望首先在 With 块中执行 .SortFields.Clear。我不确定这是否会解决它,但它会删除任何以前存在的排序字段,这些字段可能指定不正确。

【讨论】:

    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 2020-12-14
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多