2013-08-23 59 views
1

我在使用excel vba for循環中的if語句時遇到了問題。調試器的輸出不是我所期望的。我可以發佈我想要完成的完整代碼,但是我認爲我已經將其縮小到了我不瞭解的範圍。這裏是我的代碼:在for循環中使用if語句 - Excel VBA

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim i As Integer 

For i = 9 To 60 Step 3 

If Cells(i, "DR").Value < Cells(i, "EB").Value Then 
    Debug.Print i & "-ifloopstart" 
    Cells(i, "DR").Value = 999999 
    Debug.Print i & "-ifloopend" 
End If 

Next i 

End Sub 

調試器的輸出:

9-ifloopstart 
33-ifloopstart 
51-ifloopstart 
51-ifloopend 
33-ifloopend 
9-ifloopend 

不過,我預計:

9-ifloopstart 
9-ifloopend 
33-ifloopstart 
33-ifloopend 
51-ifloopstart 
51-ifloopend 

有人能解釋這是如何工作?它似乎循環回if語句的開始,而不是完成if語句。我如何修改代碼以獲得我期望的輸出?我一直在掙扎與此幾個小時,它似乎很簡單:(。

+1

更新表將再次觸發事件代碼禁用此,所以你應該在進行任何更改之前使用'Application.EnableEvents = FALSE'。完成後回到True ... –

回答

2

每次工作與Cells(i, "DR").Value = 999999更新,Worksheet_Change被再次調用。

認爲它這樣,每一次上面的代碼被調用,修改細胞,進而激發工作表變化的方法

所以你有效地嵌套此功能的三個電話:

  • 調用一次,其中i = 9
    • 再次調用,其中i = 33
      • 再次調用,其中i = 51個
      • 飾面I = 51呼叫
    • 飾面I = 33呼叫
  • 飾面我= 9致電

VBA然後往回m中的每一個都可以回到您的方法第一次運行。

編輯:Tim says你可以用Application.EnableEvents=False

+0

哇,非常感謝大家的回答!...我一直在這裏瘋狂。 – DanW