2011-09-15 14 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

また、fromRowとtoRowのカスタムを書いて、wrksheet.Rows( "A1:D60")のようなヘッダをソートすると、選択範囲は です。 xlGuess、_ OrderCustom:= 1、MatchCase:= False、Orientation:= xlTopToBottom End With –

+0

こんにちはEmaad、私はそれが混乱していることを知っています。しかし、選択は正しいです。列の開始は常に9です。列の並べ替えは常にAです。 – chris

答えて

2

....事前にありがとうそれをアクティブにしないで、ソートしようとします。あなたが持っている問題の説明へのリンクは次のとおりです:Beginning VBA: Select and Activate。長いストーリーは短く、決して.Selectまたは.Selectionを使用することはできません。ユーザーが選択したコードを実行できるようにしたい場合を除きます。それでもなお、常に素晴らしいアイデアはありません。ここにあなたのサブは、1行に再書かれています:

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 

重要な変更点は以下のとおりです。

  • 必要は.Selectを使用しないように。それを使用したい場合は、まずwrkSheet.Activateを使用する必要があります。
  • 変更Key1:=範囲( "A9")からKey1:= wrkSheet.Range( "A9")。セル/範囲で作業するときは、常に明示的に役立ちます。
  • 1つのメソッドしか実行していないので、Withステートメントは不要です。
+0

ありがとうございました!素晴らしい答え! – chris

関連する問題