2017-10-14 12 views
0

なぜこのコードは失敗しますか?すべてのワークシートをループして、指定した範囲をソートします。ワークシートをループし、それに応じてデータをソートする

コードは、私が

For ws each activeworkbook.worksheets 
ws.activate 

を使用するときに動作しますが、私は以下のコードを使用する場合は動作しません。

誰かが私を助け、VBAは、ランタイムエラー1004

を思い付く理由を説明することができます私もFor j = 2 to thisworkbook.worksheets.count を使用することを好むだろうが、それはこの部分でもない

Sub beautsort() 

Dim LR As Long, LC As Long 
Dim i As Integer, j As Integer 
Dim ws As Worksheet 


Application.ScreenUpdating = False 

For Each ws In ThisWorkbook.Worksheets 

    'Starting fromt the last occupied cells and going upwards 
    Lastrow = ws.Range("B30000").End(xlUp).Row 

    For i = Lastrow To 3 Step -1 
     bLR = ws.Range("A" & i).End(xlUp).Offset(1, 0).Row 
     LC = ws.Range("B" & i).End(xlToRight).Column 

        If ws.Range("B" & i).Value = "All Grps" Then 
         ws.Range(Range("B" & i).Offset(-1, -1), ws.Cells(bLR, LC)).Sort _ 
            key1:=ws.Range("B3"), Order1:=xlDescending 
        End If 

    Next i 

Next ws 

Application.ScreenUpdating = True 

End Sub 
+3

ws.Range(ws.Range( "B"&i).Offset(-1、-1)、ws.Cells(bLR、LC))のようなシート参照で範囲を修飾します。Sort _ key1:= ws.Range( "B3")、Order1:= xlDescending – sktneer

+0

ありがとうsktneer;) –

+0

ココを歓迎します! :) – sktneer

答えて

0

を動作しません。

ws.Range(Range("B" & i).Offset(-1, -1), ws.Cells(bLR, LC)) 

非修飾参照Range("B" & i).Offset(-1, -1)はまだ全体的に意味、現在のワークシートを参照します現在のワークシートとwsワークシートの間にあり、不可能でエラーをスローします。

参照を修飾すると、ws.Range("B" & i).Offset(-1, -1)となり、問題が解決されます。

RangeをRange(Range、Range)の形式で使用する場合、外側の範囲を修飾しないために実際には必要ない(時にははるかに明瞭で簡単です)ことに注意してください。

は、このステップスルーしてみてください。

Sub Referencing() 

    With Range("B2:D4") 

     Range(Cells(1, 1), Cells(2, 2)).Select 
     .Select 
     .Interior.ColorIndex = 3 
     Range("A1").Select 
     .Range(Cells(1, 1), Cells(2, 2)).Select 
     Range("A1").Select 
     Range(.Cells(1, 1), .Cells(2, 2)).Select 
     Range("A1").Select 
     .Range(.Cells(1, 1), .Cells(2, 2)).Select 
     .Range("A1").Select 

    End With 

End Sub 

両方の内側と外側の範囲を予選の時点では、結果が予想されているものではないかもしれません。 .rangeと.cellプロパティは、実際にはオフセットプロパティのように動作します。外側の範囲を修飾すると、参照範囲がB2:D4に設定されます。ここで、B2は最初の行と最初の列です。内側の範囲を修飾すると、再び同じオフセットが適用されます。

関連する問題