2012-03-27 5 views
4

私は初心者です。最初のものを除き、私のExcelファイルのすべてのワークシートでループを行いたいと思います。ただし、以下のコードは2番目のコードでのみ動作します。このコードで何が間違っているか教えてください。あなたが変更する必要がありますVBA-Loop with some worksheets

感謝

Sub MobileTCalculation() 
'MobileTCalculation Macro 
Dim i As Integer 

For i = 1 To 40 
Worksheets(1 + 1).Select 
Range("A20").Select 
On Error Resume Next 
Next i 

End Sub 

答えて

3

私は最初のシートをスキップして、ループを以下のように変更します。

はまた、二つのことを、この

Sub MobileTCalculation() 
    Dim i As Integer 

    For i = 2 To 40 
     Worksheets(i).Range("A20").Select 
    Next i 

End Sub 

を使用)、ブック内だけで40枚があるかどうWorksheets(i + 1)はあなたにエラーを与えるだろう。

1)On Error Resume Nextの使用は必要な場合にのみ使用してください。

2)使用しないでください。.SELECTコードが遅くなります。代わりに、直接アクションを実行します。例えば

Sub MobileTCalculation() 
    Dim i As Integer 

    For i = 2 To 40 
     With Worksheets(i).Range("A20") 
      Debug.Print .Value 
     End With 
    Next i 

End Sub 

HTH

シド

+1

「For Each」ではなく「For i = x to y」を使用していると正しく感じませんが、ワークシートのインデックステストを追加することはできません。 +1 – brettdj

+0

私はあなたに同意します。私は通常 'For Each'を使用して、避けたいシート名を比較します。このシナリオでは、合計枚数が何枚あるかわかりません。 50枚のシートがあり、ユーザーが2〜40回ループしたい場合は、「For i = x to y」は良い考えです。 :) –

+0

スケーラビリティのために私は「i = 2 To Sheets.Count' – Reafidy

1

Worksheets(1 + 1).Select 

がそう、それはあなたのi変数を使用しています...あなただけの1 + 1を入れているので、それは常に2

Aと評価さ古典的な間違い:

+0

笑ありがとうございました!私は "i"の代わりに1つを置くことを見なかった! – user1115535

関連する問題