2012-03-27 75 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

我如果您想跳過第一張紙,請按照下圖所示更改循環。 Worksheets(i + 1)會給你的錯誤,如果有40只在您的工作簿表;)

使用此

Sub MobileTCalculation() 
    Dim i As Integer 

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

End Sub 

另外兩件事情。

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 i = x to y'而不是'For Each',它感覺不對,但它確實節省了添加工作表索引測試。 +1 – brettdj 2012-03-27 02:34:57

+0

我同意你的意見。我通常使用'For Each',然後比較我想要避免的表名。在這種情況下,我不確定總共有多少張。如果有50張,並且用戶想要循環2 - 40,那麼我相信,'對於i = x到y'是更好的主意。 :) – 2012-03-27 02:43:43

+0

對於可擴展性,我建議:'For i = 2 To Sheets.Count' – Reafidy 2012-03-28 01:12:18

1

你應該改變:

Worksheets(1 + 1).Select 

所以它使用了你的變量i ...你剛剛把1 + 1所以它始終計算爲2

一經典錯誤:)

+0

大聲笑,謝謝!沒有看到我把一個1而不是「我」! – user1115535 2012-03-27 00:42:52