2011-09-15 110 views
0

我有排序功能的問題。它不起作用。如果我在手動排序的同時錄製宏,錄製的內容與我的相似。小組如下所示:Excel-VBA排序不起作用

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 

預先感謝您....

克里斯托夫

+0

您確定選擇中包含範圍(「A9」)? –

+0

另外編寫自定義從Row和toRow並在排序中給它的標題像wrksheet.Rows(「A1:D60」)。選擇 With選擇 。排序Key1:= Range(「B1」),Order1:= xlAscending,Header:= xlGuess,_ OrderCustom:= 1,MatchCase:= False,方向:= xlTopToBottom 結尾 –

+0

嗨Emaad,我知道它很混亂;但選擇是正確的。起始行始終爲9.排序列總是A. – chris

回答

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語句。
+0

謝謝!好的答案! – chris