如何以编程方式查找/调试缺少的“End If”(查找位置)

How to programmatically Find / Debug (Find Location) of the missing `End If`

我在工作表事件上有一个很长的代码,其中包含很多 IF 条件和嵌套 IF。
有时,我忘记添加结尾 if ,所以当我调试代码时,得到这个 Compile error:Block If without End If.
错误意思很明确,我靠眼睛找到这个缺失的IF。
因为工作表事件上的代码,我不能使用 F8(进入)。
So,是否有任何编程方法来查找/调试(查找位置)丢失的End If
提前感谢任何有用的评论和回答。

仔细检查您的代码,确保没有单行 If (condition) Then (do something) 语句。意思是在每个 Then 之后是一个换行符,并且该行后面没有任何语句。语句在下面的下一行中,并以 End If.

结束
If a Then b = 1  ' single line statement

避免使用它们并始终使用像

这样的块
If a Then
    b = 1
End If

这看起来有点麻烦,但可以更容易地找到问题。

然后检查您的代码,确保正确缩进所有内容。这样你会发现有没有没有关闭的块。

请注意,错误消息可能具有误导性,并非来自缺失的 End If。即使你的编译器告诉你,这只是意味着编译器正在等待 End If 其他东西来了,所以它无法在预期的位置找到它:

例如,如果您只是混淆了 End IfEnd With 的位置,并且您的代码格式不正确,如下所示,您将收到缺少的 End If 编译器消息:

If Condition = True Then

With ActiveSheet


End If

End With

但是如果你正确地缩进你的代码并且很好地格式化它你会很容易地发现有问题:

If Condition = True Then
    With ActiveSheet

    End If  ' should be `End With` inner block needs to close first
End With

现在您清楚地看到 End IfEnd With 混淆了并且不匹配它们的 IfWith。在嵌套块中,始终需要先关闭内部块。