2017-09-16 103 views
0

下面粘贴是我写的代码的一部分,而运行相同的,我得到NEXT没有FOR错误。下一个没有错误的Excel VBA

我运行了没有这部分的代码,以确保在下面的代码之前的for/if循环代码中没有其他语法错误。

Dim M As Integer 
M = 24 

For i = 7 To 19 Step 1 

    If ActiveSheet.Cells(7, i) >= 0 And ActiveSheet.Cells(8, i) <= 15 Then 
     ActiveSheet.Cells(M, 6) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(8, i))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= 345 And ActiveSheet.Cells(8, i) <= 360 Or ActiveSheet.Cells(7, i) >= 345 And ActiveSheet.Cells(8, i) <= 0 Then 
     ActiveSheet.Cells(M, 6) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(8, i))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 6) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 7) Then 
      ActiveSheet.Cells(M, 6) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 6) = (ActiveSheet.Cells(23, 7) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 7) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 7))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 8) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 9) Then 
      ActiveSheet.Cells(M, 7) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 7) = (ActiveSheet.Cells(23, 9) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 8) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 9))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 10) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 11) Then 
      ActiveSheet.Cells(M, 8) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 8) = (ActiveSheet.Cells(23, 11) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 9) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 11))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 12) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 13) Then 
      ActiveSheet.Cells(M, 9) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 9) = (ActiveSheet.Cells(23, 13) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 10) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 13))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 14) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 15) Then 
      ActiveSheet.Cells(M, 10) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 10) = (ActiveSheet.Cells(23, 15) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 11) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 15))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 16) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 17) Then 
      ActiveSheet.Cells(M, 11) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 11) = (ActiveSheet.Cells(23, 17) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 12) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 17))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 18) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 19) Then 
      ActiveSheet.Cells(M, 12) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 12) = (ActiveSheet.Cells(23, 19) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 13) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 19))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 20) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 21) Then 
      ActiveSheet.Cells(M, 13) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 13) = (ActiveSheet.Cells(23, 21) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 14) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 21))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 22) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 23) Then 
      ActiveSheet.Cells(M, 14) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 14) = (ActiveSheet.Cells(23, 23) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 15) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 23))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 24) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 25) Then 
      ActiveSheet.Cells(M, 15) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 15) = (ActiveSheet.Cells(23, 25) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 16) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 25))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 26) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 27) Then 
      ActiveSheet.Cells(M, 16) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 16) = (ActiveSheet.Cells(23, 27) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 17) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 27))/30 * 100 
    End If 

    If ActiveSheet.Cells(7, i) >= ActiveSheet.Cells(23, 28) Then 
     If ActiveSheet.Cells(8, i) <= ActiveSheet.Cells(23, 29) Then 
      ActiveSheet.Cells(M, 17) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(7, i))/30 * 100 
     Else 
      ActiveSheet.Cells(M, 17) = (ActiveSheet.Cells(23, 29) - ActiveSheet.Cells(7, i))/30 * 100 
      ActiveSheet.Cells(M, 18) = (ActiveSheet.Cells(8, i) - ActiveSheet.Cells(23, 29))/30 * 100 
    End If 


M = M + 1 

Next i 
+0

可能是一个重复:https://stackoverflow.com/q/29021377/1531971(但是你应该表明您做了一些研究对这个非常普遍的问题) – jdv

+0

为什么你使用'ActiveSheet。 Cells(8,i) - ActiveSheet.Cells(8,i)'?只是放在'0' – jsotola

+0

如果有人在代码执行时更改为另一个工作表,会发生什么情况? – jsotola

回答

1

所有内If的缺少各自End If


这里是你的代码清理了一下,并固定:

Option Explicit 

Public Sub TestSyntax() 
    Dim m As Long, i As Long 

    m = 24 

    With ActiveSheet 

     For i = 7 To 19 Step 1 

      If .Cells(7, i) >= 0 And .Cells(8, i) <= 15 Then 
       .Cells(m, 6) = (.Cells(8, i) - .Cells(8, i))/30 * 100 
      End If 

      If .Cells(7, i) >= 345 And .Cells(8, i) <= 360 Or .Cells(7, i) >= 345 And .Cells(8, i) <= 0 Then 
       .Cells(m, 6) = (.Cells(8, i) - .Cells(8, i))/30 * 100 
      End If 

      If .Cells(7, i) >= .Cells(23, 6) Then 
       If .Cells(8, i) <= .Cells(23, 7) Then 
        .Cells(m, 6) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 6) = (.Cells(23, 7) - .Cells(7, i))/30 * 100 
        .Cells(m, 7) = (.Cells(8, i) - .Cells(23, 7))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 8) Then 
       If .Cells(8, i) <= .Cells(23, 9) Then 
        .Cells(m, 7) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 7) = (.Cells(23, 9) - .Cells(7, i))/30 * 100 
        .Cells(m, 8) = (.Cells(8, i) - .Cells(23, 9))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 10) Then 
       If .Cells(8, i) <= .Cells(23, 11) Then 
        .Cells(m, 8) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 8) = (.Cells(23, 11) - .Cells(7, i))/30 * 100 
        .Cells(m, 9) = (.Cells(8, i) - .Cells(23, 11))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 12) Then 
       If .Cells(8, i) <= .Cells(23, 13) Then 
        .Cells(m, 9) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 9) = (.Cells(23, 13) - .Cells(7, i))/30 * 100 
        .Cells(m, 10) = (.Cells(8, i) - .Cells(23, 13))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 14) Then 
       If .Cells(8, i) <= .Cells(23, 15) Then 
        .Cells(m, 10) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 10) = (.Cells(23, 15) - .Cells(7, i))/30 * 100 
        .Cells(m, 11) = (.Cells(8, i) - .Cells(23, 15))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 16) Then 
       If .Cells(8, i) <= .Cells(23, 17) Then 
        .Cells(m, 11) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 11) = (.Cells(23, 17) - .Cells(7, i))/30 * 100 
        .Cells(m, 12) = (.Cells(8, i) - .Cells(23, 17))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 18) Then 
       If .Cells(8, i) <= .Cells(23, 19) Then 
        .Cells(m, 12) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 12) = (.Cells(23, 19) - .Cells(7, i))/30 * 100 
        .Cells(m, 13) = (.Cells(8, i) - .Cells(23, 19))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 20) Then 
       If .Cells(8, i) <= .Cells(23, 21) Then 
        .Cells(m, 13) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 13) = (.Cells(23, 21) - .Cells(7, i))/30 * 100 
        .Cells(m, 14) = (.Cells(8, i) - .Cells(23, 21))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 22) Then 
       If .Cells(8, i) <= .Cells(23, 23) Then 
        .Cells(m, 14) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 14) = (.Cells(23, 23) - .Cells(7, i))/30 * 100 
        .Cells(m, 15) = (.Cells(8, i) - .Cells(23, 23))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 24) Then 
       If .Cells(8, i) <= .Cells(23, 25) Then 
        .Cells(m, 15) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 15) = (.Cells(23, 25) - .Cells(7, i))/30 * 100 
        .Cells(m, 16) = (.Cells(8, i) - .Cells(23, 25))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 26) Then 
       If .Cells(8, i) <= .Cells(23, 27) Then 
        .Cells(m, 16) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 16) = (.Cells(23, 27) - .Cells(7, i))/30 * 100 
        .Cells(m, 17) = (.Cells(8, i) - .Cells(23, 27))/30 * 100 
       End If 
      End If 

      If .Cells(7, i) >= .Cells(23, 28) Then 
       If .Cells(8, i) <= .Cells(23, 29) Then 
        .Cells(m, 17) = (.Cells(8, i) - .Cells(7, i))/30 * 100 
       Else 
        .Cells(m, 17) = (.Cells(23, 29) - .Cells(7, i))/30 * 100 
        .Cells(m, 18) = (.Cells(8, i) - .Cells(23, 29))/30 * 100 
       End If 
      End If 

      m = m + 1 
     Next 

    End With 

End Sub 
+0

只是省略了'ActiveSheet'和'dot'的引用,代码会一样的,就像buggy – jsotola

+0

@jsotola :)(只是试图展示如何在每个地方都是显式的,包括使用'ActiveSheet'时) –

+0

你在这个意义上是正确的 – jsotola

1

您可以使用缩短代码循环

Dim j As Integer 
Dim k As Integer 

Dim m As Integer 
m = 24 

With ActiveSheet 
    For i = 7 To 19 Step 1 

     If .Cells(7, i) >= 0 And .Cells(8, i) <= 15 Then .Cells(m, 6) = (.Cells(8, i) - .Cells(8, i))/30 * 100 
     If .Cells(7, i) >= 345 And .Cells(8, i) <= 360 Then .Cells(m, 6) = (.Cells(8, i) - .Cells(8, i))/30 * 100 

     k = 6       ' increments by one per loop 

     For j = 6 To 28 Step 2 

      If .Cells(7, i) >= .Cells(23, j) Then          ' 6  +2 each loop j 
       If .Cells(8, i) <= .Cells(23, j + 1) Then        ' 7  +2    j+1 
        .Cells(m, k) = (.Cells(8, i) - .Cells(7, i))/30 * 100   ' 6  +1    k 
       Else 
        .Cells(m, k) = (.Cells(23, j + 1) - .Cells(7, i))/30 * 100  ' 6,7  +1,+2   k ,j+1 
        .Cells(m, k + 1) = (.Cells(8, i) - .Cells(23, j + 1))/30 * 100 ' 7,7  +1,+2   k+1,j+1 
       End If 
      End If 
      k = k + 1 
     Next j 
    m = m + 1 
    Next i 
End With 
+0

感谢您的输入 –

+0

我不得不编辑一些部分来照顾几个其他计算,粘贴下面的代码,它不按预期工作: –