2012-03-27 2 views
4

저는 초급자이고 첫 번째 것을 제외하고는 Excel 파일의 모든 워크 시트에서 루프를 만들고 싶습니다. 그러나 아래 코드는 두 번째 코드에서만 작동합니다. 이 코드에서 잘못된 점을 설명해 주시겠습니까?일부 워크 시트가있는 VBA 루프

많은 감사

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

관련 문제