2013-02-23 80 views
1

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

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

然后径流和渗滤等于雨-FC(WC + WCinit)+ REFET * DZ * 0.5 和WJ(J)= FC

别的 径流和渗滤= 0 和WC(J)= WC(j-1)+ WCinit + precipit-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

如果在Wend后面j = 2,那么在你开始之前你永远不会进入While循环,因为j = 2。由于'j <= NumMonth'在循环开始时显然是真的,所以在第一次遇到时,另一个While条件 - WC(j-1)+ WCinit(i)* dz> pwp * dz'是错误的,所以你永远不会进入循环。你应该使用F8来检查你的代码。 – 2013-02-23 16:22:04

+0

此外,我没有看到你的数组(或变体)变量'WC'和'WCinit'是在哪里声明或初始化的。他们不是吗? – 2013-02-23 16:29:15

+0

你有什么建议如何解决这个问题?切换循环的顺序?我一直在通过我的代码,我明白这是发生,但是,我是新来的VBA,不知道从哪里走。 – user1977802 2013-02-23 16:31:04

回答

2

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

要做这件事,并且能够增加j直到While条件成立,你需要一个不同类型的循环,也许是Do Until。看到这个MSDN reference