2017-01-18 43 views
2

我是VBA新人。我想知道爲什麼sum1()顯示10而sum2()顯示11?提前致謝。Excel VBA For ...下一個

Sub sum1() 
    Dim x As Integer 
    x = 0 
    For x = 5 To 5 
     x = x + x 
     MsgBox x 
    Next 
End Sub 

Sub sum2() 
    Dim x As Integer 
    x = 0 
    For x = 5 To 5 
     x = x + x 
    Next 
    MsgBox x 
End Sub 

回答

3

A VBA for -loop在每次迭代結束時遞增索引變量。這就是Next關鍵字的作用。在sum1()你得到:

Sub sum1() 
    Dim x As Integer 
    x = 0 ' x is 0 
    For x = 5 To 5 ' x set to 5 
    x = x + x 'x gets 5+5=10 
    Next 'x gets 10+1=11 
    MsgBox x 'display x=11 
End Sub 

sum2()你:

Sub sum2() 
    Dim x As Integer 
    x = 0 ' x is 0 
    For x = 5 To 5 ' x is 5 
    x = x + x 'x gets 5+5=10 
    MsgBox x 'display x=10 
    Next 'x gets 10+1 and is now 11 
End Sub 

我@MitchWheat同意,它通常不是好的做法,以修改您的索引變量,而在循環中。更好的方法是:

Sub sum3() 
    Dim x as Integer 
    Dim i as Integer 
    x= 1 
    For i = 5 To 5 
     x = x + x 
    Next 
    MsgBox x 
End Sub 
+0

非常感謝Austin,這非常有幫助! – user7433793

+1

@ user7433793通過「接受」你的問題的答案,這個答案最適合你,人們會更快樂地回答你未來的問題。 –

1

For循環在循環結束時遞增循環變量。

在第二個代碼片段中,for循環將x從10增加到11,然後顯示它。

鑑於第一個代碼片段會在您顯示它之後遞增x。這不是VBA特有的。

看到這一點,運行:

Sub sum1_1() 
    Dim x As Integer 

    x = 0 
    For x = 5 To 5 
     x = x + x 
     MsgBox x 
    Next 

    MsgBox x 
End Sub 

順便說一句:這不是從一個循環內修改循環計數器的最佳實踐。它可能會導致難以理解的代碼。

+0

非常感謝米奇! – user7433793

+0

@ user7433793請點擊位於答案左上方的'Thanks'按鈕,形狀類似於'v',綠色:P –