尝试编译时,代码会抛出“如果没有块If则结束”。 (如果语句用于嵌套循环)

时间:2019-08-22 21:58:24

标签: excel vba loops if-statement

如果我的变量之一大于给定值,则尝试提示excel进入另一个嵌套循环。但是,在尝试编译时,出现“ End If Without block if”错误。

我尝试将“ Endif”放置在“ next m”之后,但没有成功。我尝试了其他一些不使用“ if”的解决方法;但是,if语句对于我尝试编写的代码似乎是不可避免的。

For i = 1 To 4000000

    r = x + y
    Worksheets("sheet1").Cells(Z, 1).Value = r
    Z = Z + 1


    x = r + y
    Worksheets("sheet1").Cells(Z, 1).Value = x
    Z = Z + 1


    y = r + x
    Worksheets("Sheet1").Cells(Z, 1).Value = y
    Z = Z + 1

    If Z > 499 Then For m = 1 To 501

        e = 1

        d = Worksheets("sheet1").Cells(e, 1).Value Mod 2
        If d = 1 Then Worksheets("sheet1").Cells(e, 1).ClearContents

        e = e + 1

        If e > 500 Then Range(q, 1) = "=Sum(A1:A500)" And Z = 1 And q = q + 1

    Next m
    End If
Next i

1 个答案:

答案 0 :(得分:0)

如果您在输入Then关键字后没有按 ENTER ,则您没有If...End If块,而是If 声明-像这样:

If True Then DoSomethingConditional

DoSomethingConditional可以是很多东西,但是For...Next block 不能!

将其更改为If...End If块:

If True Then
    DoSomethingConditional
End If

现在DoSomethingConditional可以是您想要的任何东西:

If Z > 499 Then
    For m = 1 To 501
        '...
    Next
End If

请注意,consistent indentation如何清楚地说明一个块的起始位置,结束位置,内部内容以及其嵌套深度。

经验法则,为了保持一致性和可维护性,避免使用If 语句,并始终使用正确缩进的If...End If 是一个好主意(在花括号语言中,这类似于将花括号始终放在条件范围内,即使它只是一个语句,并且花括号是可选的。

这意味着该指令:If d = 1 Then Worksheets("sheet1").Cells(e, 1).ClearContents变为:

If d = 1 Then 
    Worksheets("sheet1").Cells(e, 1).ClearContents
End If