【问题标题】:Code throws "End if without block If" when attempting to compile. (If statement used for nested loop)尝试编译时,代码会抛出“End if without block If”。 (用于嵌套循环的 if 语句)
【发布时间】:2019-08-22 21:58:24
【问题描述】:

如果我的变量之一变得大于给定值,则尝试提示 excel 移动到另一个嵌套循环。但是,在尝试编译时,我收到“End If without block If”错误。

我试图在“next m”之后放置一个“Endif”,但没有成功。我尝试了其他一些不使用“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

【问题讨论】:

  • 你不能做If Z > 499 Then For m = 1 To 501。将For 循环定义放在自己的行中。
  • 我认为你应该用谷歌搜索 If...End IfFor...Next 语句在 VBA 中是如何工作的。这部分是错误的:If Z > 499 Then For m = 1 To 501 等等
  • 还有xy是从哪里来的?我认为您没有发布整个代码。

标签: excel vba loops if-statement


【解决方案1】:

如果您在输入 Then 关键字后没有按 ENTER,那么您没有 If...End If 块,而是 If 语句 - 像这样:

If True Then DoSomethingConditional

DoSomethingConditional 可以是很多东西...但不是For...Next

将其更改为 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 blocks 是一个好主意,以保持一致性和可维护性(在花括号中这类似于在条件范围内始终使用大括号,即使它只是一个语句并且大括号是可选的)。

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

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

【讨论】:

  • 这是一个非常有用的答案。与最佳实践相关的建设性批评非常受欢迎。这确实解决了我原来的问题。仍在学习绳索,我很欣赏扎实的指导
猜你喜欢
  • 1970-01-01
  • 2020-06-22
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
相关资源
最近更新 更多