【问题标题】:Sorting with VBA giving wrong result用 VBA 排序给出错误的结果
【发布时间】:2017-06-02 11:07:21
【问题描述】:

我有这段代码可以对 Excel 工作表进行排序

'for the ascending order
Range("A14:CB" & lastRow).Sort key1:=Range(Col & "14:" & Col & lastRow), Order1:=xlAscending, Header:=xlNo, key2:=Range("C14:C" & lastRow), Order2:=xlAscending, Header:=xlNo
'for the descending order
Range("A14:CB" & lastRow).Sort key1:=Range(Col & "14:" & Col & lastRow), Order1:=xlDescending, Header:=xlNo, key2:=Range("C14:C" & lastRow), Order2:=xlAscending, Header:=xlNo

这是我在Col=J 上进行升序排序时得到的结果

这就是我对Col=J进行降序排序时得到的结果

两者显然都是错误的。有没有我在 VBA 代码中没有看到的错误?

【问题讨论】:

    标签: excel sorting vba


    【解决方案1】:

    Excel 的排序效果很好,例如选择一个范围并运行以下命令:

    Option Explicit
    
    Sub TestMe()
    
        Selection.Sort key1:=Selection, Order1:=xlDescending
    
    End Sub
    

    在您的代码中,您应该检查定义范围的变量。例如。 lastRowCol。在代码的顶部写这样的东西:

    debug.print lastRow
    debug.print Col
    

    【讨论】:

    • lastRow 为 17(数据从 14 开始),Col 为 10(选择 J 列时)
    • 那么你对这里的Range(Col & "14:" & Col & lastRow) 有什么期望例如,如果你转到即时窗口并写?Col & "14:" & Col & lastRow 它会给你什么?我想你在某个地方On Error Resume Next
    • On Error Resume Next 已被删除,但问题仍然存在。来自Range(...) 我希望充当Range("J14:J17")
    • 在即时窗口中写下您询问的内容返回1014:1017
    • Range("A14:CE" & lastRow).Sort key1:=Range(Cells(14, Col), Cells(lastRow, Col)), Order1:=xlAscending, Header:=xlNo, key2:=Range("C14:C" & lastRow), Order2:=xlAscending, Header:=xlNo 确实解决了问题
    猜你喜欢
    • 1970-01-01
    • 2014-09-16
    • 2019-04-06
    • 2011-11-15
    • 2019-02-06
    • 2014-01-30
    • 2018-08-01
    • 2016-08-30
    • 1970-01-01
    相关资源
    最近更新 更多