如何以编程方式查找/调试缺少的“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 If
和 End 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 If
和 End With
混淆了并且不匹配它们的 If
和 With
。在嵌套块中,始终需要先关闭内部块。
我在工作表事件上有一个很长的代码,其中包含很多 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 If
和 End 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 If
和 End With
混淆了并且不匹配它们的 If
和 With
。在嵌套块中,始终需要先关闭内部块。