If-ElseIf-Else代码正在跳过其他块

时间:2019-06-15 00:03:52

标签: excel vba if-statement nested

我对VBA还是很陌生,现在对我已经拥有了近2周的子程序的一部分感到非常困惑。今天,我一次一行地检查代码(按F8键)以查看挂断的位置,我想我找到了源。 我对IF-THEN语句的理解是,条件是在每个“ IF”语句中检查的,只有条件为True时,才运行“ THEN”部分之后的代码。使用IF-Elseif-Else时,代码将以类似的方式检查ElseIf部分,如果不正确,则将运行ELSE部分。

但是,我一直注意到我的特定代码有时会确定ELSE部分不应该运行它。我已经通过注释掉上面所有相关的IF和ElseIf代码,检查了代码的这一部分,效果很好。

那么,我的问题是这样的:对于像我一样的嵌套IF语句,如果某些嵌套IF是正确的,但不是全部,那么ELSE语句会在此时变成空吗? Excel是否认为“好吧,在第一个IF-Then嵌套中是正确的,我会继续检查这一点,之后可以忽略ElseIfs和ELSE语句”

感谢您与我保持联系。我展示的代码肯定可以写得更好。最终,我认为这里的解决方案是不使用嵌套的if语句,而是将子级IF语句编译为一个非常长的IF语句,尽管该语句会立即检查所有这些情况是否成立。

任何想法/建议/反馈将不胜感激! 附言我必须从家用计算机上的打印纸上重新输入以下所有代码。我在实际工作计算机上拥有的代码均正确拼写。

    Range("I3").FormulaArray= "=INDEX(CombinedFillet,MATCH(1,(F3=StudMaterial)*(G3=BaseMaterial)*(H3=StudDiameter),0))"

If listboxStudMatl.ListIndex <> -1 And listboxStudDiamDecimal.ListIndex <> -1 And listboxBase.ListIndex <> -1 Then
    If Not IsError (Application.Match(listboxBase.value, Sheets("Parts").Range("SupportRod"), 0)) Then
        If listboxStudMatl.Value = "OSS/HSS" or listboxStudMatl.Value = "CRES" or listboxStudMatl.value = "HY-80" Then
            If listboxStudDiamDecimal.Value = "0.375" Then
                textboxJ1_3.Text = Cells.Range("M4").Text
                MsgBox "Test 1" 'for debugging only
            Elseif listboxStudDiamDecimal.value > 0.375 Then
                MsgBox "Choose a different option"
                Exit Sub
            End If
        End If
    End If

ElseIf listboxParts.ListIndex <> -1 And listboxBase.ListIndex <> -1 Then
    If Not IsError(Application.Match(listboxParts.Value, Sheets("Parts").Range("Stud375"), 0)) Then
        textboxJ1_3.Text = Cells.Range("M4").Text
        MsgBox "Test 2" 'for debugging only
    End If

Else
MsgBox "Test 3" 'for debugging only
Range ("I3").Select
Selection.Copy
Range("I4").Select
Selection.PasteSpecial Paste:=xlPasteValues
textboxJ1_3 = Cells.Range("I4").Text
MsgBox "Test 4" ' for debugging only

End If

0 个答案:

没有答案