2015-01-22 17 views
0

У меня есть следующий код VBA:For Loop не выполняется должным образом

Sub Find_Max_Yearly_Precip() 
    Dim Year_Rng As Range 
    Dim rng As Range 
    Dim nyear As Integer 
    Dim nL As Integer 
    Dim nU As Integer 

    For nyear = 0 To nyear = 35 
     'See if its the first loop 
     If nyear <> 0 Then 
      'Decide if its a leap year 
      If nyear = 1 Or nyear = 5 Or nyear = 9 Or nyear = 13 _ 
      Or nyear = 17 Or nyear = 21 Or nyear = 25 Or nyear = 29 _ 
      Or nyear = 33 Then 
       nL = nU + 1 
       nU = nL + 366 
       Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1)) 
       Year_Rng.Select 
      Else 
       nL = nU + 1 
       nU = nL + 365 
       Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1)) 
       Year_Rng.Select 
      End If 
     Else 
      nL = 2 
      nU = 366 
      Set Year_Rng = Range(Cells(nL, 1), Cells(nU, 1)) 
      Year_Rng.Select 
     End If 

     For Each rng In Year_Rng 
      If rng.Offset(, 2) = Application.WorksheetFunction _ 
      .Max(Year_Rng.Offset(, 2)) Then 
       rng.Offset(, 3).Value = "Max" 
      End If 
     Next rng 
    Next 
End Sub 

И это, кажется, не выполняет цикл For nyear = 0 to nyear = 35. Он правильно работает для nyear = 0, но по каким-то причинам идет до nyear =1, а затем заканчивает подпрограмму. Любые идеи о том, почему он не работает?

+0

Вместо жесткого кодирования в значениях года, можно также определить leapYear путем определения if (nYear MODULUS 4 = 1), то это високосный год. –

+0

Спасибо за подсказку. Раньше я еще не видел MODULUS. Как это работает? – dubbbdan

+0

Модуль в основном вычисляет остаток после деления. Так что если у вас 9 MOD 4, вы получите 1 (потому что остаток 9/4 равен 1). Чтобы использовать функцию в VB, вы должны использовать «9 Mod 4». Или в случае високосного года вы бы сделали If (nYear Mod 4 = 1), то это високосный год. –

ответ

4

Вы должны сделать небольшие изменения в коде:

For nyear = 0 To nyear = 35 

Вместо этой линии, используйте это:

For nyear = 0 To 35 
+0

Не могу поверить, что я этого не видел. Ура! – dubbbdan

+0

Это случается когда-то. –

Смежные вопросы