在VBA中过早退出循环

时间:2013-02-23 16:06:46

标签: excel-vba for-loop vba excel

我的循环似乎过早退出。基本上,我想要以下条件:

当WC(j-1)+ WCinit * dz比pwp更高时 如果fc-WC(j-1)+ WCinit + RefEF * dz小于Precip * dz

然后径流和渗透等于沉降-fc-(WC + WCinit)+ RefET * dz * 0.5 和WJ(j)= fc

否则 径流和渗流= 0 和WC(j)= WC(j-1)+ WCinit + precip-RefET * dz

但是如果WC(j-1)+ WCinit(i)< = pwp 然后打印WC(j)= pwp

我希望整个循环在i和j = 12

时结束

当j = 2

时,循环似乎结束
Dim fc As Double
fc = Cells(4, 7).Value
NumMonth = 12
i = 1
j = 2
Dim pwp As Double
pwp = Cells(4, 8).Value
Dim dz As Double
dz = 0.5    'm

While (WC(j - 1) + WCinit(i) * dz > pwp * dz) And (j <= NumMonth)
    If (fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) < (Precip(i) * dz) Then
        Runoff(i) = (Precip(i) - fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) * 0.5
        Percolation(i) = (Precip(i) - fc - (WC(j - 1) + WCinit(i)) + RefET(i) * dz) * 0.5
        WC(j) = fc

    Else
        Runoff(i) = 0
        Percolation(i) = 0
        WC(j) = WC(j - 1) + WCinit(i) + Precip(i) - RefET(i) * dz

    End If
    j = j + 1
    i = i + 1

Wend
If WC(j - 1) + WCinit(i) <= pwp Then
    Runoff(i) = 0
    Percolation(i) = 0
    WC(j) = pwp
End If

1 个答案:

答案 0 :(得分:2)

正如我们在评论中所讨论的那样,代码永远不会进入While循环,因为条件WC(j - 1) + WCinit(i) * dz的第一部分永远不会成立。第二部分j <= NumMonth显然是正确的。

要使这个工作,并且能够增加j直到While条件成立,你需要一个不同类型的循环,也许是Do Until。请参阅此MSDN reference