Excel-VBA排序不起作用

时间:2011-09-15 14:07:11

标签: excel sorting vba

我的排序功能有问题。它不起作用。如果我在手动排序时录制宏,录制的内容就像我的。 Sub看起来如下:

Public Sub sortSelectionByDate(ByRef wrksheet As Worksheet, ByVal fromRow As Integer, ByVal toRow As Integer)
    'debug
    toRow = toRow - 1
    wrksheet.Select
    wrksheet.Rows(fromRow & ":" & toRow).Select
    With Selection
        .Sort Key1:=Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
    End With
End Sub

提前谢谢....

了Christoph

1 个答案:

答案 0 :(得分:2)

它很可能无法正常工作,因为您传递的工作表不是活动工作表,不会激活它,然后尝试排序。以下是您所遇问题描述的链接:Beginning VBA: Select and Activate。简而言之,永远不会使用。选择或。选择,除非您希望您的用户能够根据他选择的选择运行代码。即便如此,仍然不是一个好主意。这是你的副本重写在一行:

Public Sub sortSelectionByDate(ByRef wrksheet As Worksheet, ByVal fromRow As Integer, ByVal toRow As Integer)
    wrksheet.Rows(fromRow & ":" & toRow - 1).Sort Key1:=wrkSheet.Range("A9"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End Sub

重要的变化是:

  • 无需使用。选择。如果你确实想要使用它,你需要先使用wrkSheet.Activate。
  • 将Key1:=范围(“A9”)更改为Key1:= wrkSheet.Range(“A9”)。使用单元格/范围时始终有助于明确。
  • 由于您只运行一种方法,因此不需要With语句。