WC (1)에 대한 단일 값을 읽으려고합니다. 그런 다음 조건부 루프에서 WC (j)의 초기 값을 사용하고 싶습니다. WC (j)의 첫 번째 값을 부드럽게 실행합니다 (루프의 첫 번째 조건을 충족 함). 그러나 첫 번째 조건은 WC (j) 배열에서 다음 값을 설정해야합니다. 그러나 그것은 단지 비어있는 배열에 값을 설정하지 않습니다. 특히 이러한 라인 : WC (j) = FC WCinit (j) = WC (j - 1)조건부 루프, 배열에 추가하지 않는 값
I 코드를 단계별되면, FC는 = 0.3이지만 WC (j)는 비록 비어 말할 것 나는 그들을 서로 동등하게 세웠다. WC (j) 값은 비어 있으므로 내 루프의 'else'조건 만 충족시킵니다.
다음 코드 줄과 동일한 문제가 있으며 WC (j-1) 값이 있고 WCinit (j)와 동일하게 설정되지만 WCinit (j)는 비어 있습니다.
Dim Month() As Double
Dim WC() As Variant
Dim WCinit() As Variant
Dim NumMonth As Long, i As Long, j As Long
Dim Precip() As Double
Dim RefET() As Double
Dim Runoff() As Double
Dim Percolation() As Double
Sub main()
WaterBalanceReadMediterranean
WaterBalanceMediterranean
WaterBalanceReadPlains
WaterBalancePlains
End Sub
Sub WaterBalanceReadMediterranean()
NumMonth = 12
ReDim Month(1 To NumMonth)
ReDim WCinit(1 To NumMonth + 1)
ReDim WC(1 To NumMonth + 1)
ReDim Precip(1 To NumMonth)
ReDim RefET(1 To NumMonth)
ReDim Percolation(1 To NumMonth + 1)
ReDim Runoff(1 To NumMonth + 1)
For i = 1 To NumMonth
Month(i) = Cells(4 + i, 1).Value
Precip(i) = Cells(4 + i, 2).Value
RefET(i) = Cells(4 + i, 3).Value
Next i
For j = 1 To 1
WC(j) = Cells(3 + j, 11).Value
Next j
Application.ScreenUpdating = True
End Sub
Sub WaterBalanceMediterranean()
Dim fc As Double
fc = Cells(4, 7).Value
NumMonth = 12
i = 1
j = 2
Dim pwp,dz As Double
Do
If WC(j) >= pwp And (fc - WC(j - 1) + RefET(i)) < Precip(i) Then
Runoff(i) = (Precip(i) - (fc - WC(j - 1) + RefET(i))) * 0.5
Percolation(i) = (Precip(i) - (fc - WC(j - 1) + RefET(i))) * 0.5
WC(j) = fc
WCinit(j) = WC(j - 1)
ElseIf WC(j) >= pwp And (fc - WC(j - 1) + RefET(i)) > Precip(i) Then
Runoff(i) = 0
Percolation(i) = 0
WC(j) = WC(j - 1) + Precip(i) - RefET(i)
WCinit(j) = WC(j - 1)
Else
Runoff(i) = 0
Percolation(i) = 0
WC(j) = pwp
WCinit(j) = WC(j - 1)
End If
j = j + 1
i = i + 1
Loop While j < 14
End Sub
많은 코드가 있습니다. 많은 것은 그 문제와 무관 한 것처럼 보입니다. 문제를 재현하면서 코드를 최대한 줄이면 문제를 해결할 수 있을지 의심 스럽습니다. 그러나, 내 첫 번째 추측은 j가 루프 이전에 2와 같음을 설정하는 것이며,이 작업을 원하지 않는다는 것입니다 (그렇습니까?). 'j = 0' 또는'Do' 전에 원하는 값을 입력하십시오. – mkingston
많은 코드가 꽤 중복되어 있습니다. 'For i = 1 to 1'. 'j = 1 : j = 2'. – mkingston
j = 2로 루프를 시작하는 것보다 초기 값을 설정하기 위해 j = 1로 설정하려고했습니다. – user1977802