如果错误检查语句不起作用

时间:2019-05-30 15:03:31

标签: excel vba

我需要进行一些错误检查,以便用户知道在发送表单之前他们已经错过了一些信息。

我有一个表,该表由数据验证列表下拉框控制。此框的编号为1到15,将显示/隐藏与所选编号相关的行,即所选的3,因此显示1到3的行,4到15或隐藏行。错误检查代码应该执行的操作是,检查选定的列表号,然后检查每行中的一个单元格以查看其是否为空,如果为空,则显示错误消息,否则为空。我需要针对显示的每一行而不是隐藏的行显示此错误消息。我在页面顶部有一个单元格,用于告诉用户他们有多少错误,所以我不希望将隐藏行添加到此计数中。我可以使它适用于数字零和1,但对于2到15则不起作用。下面的代码仅显示数字0到3,我可以在工作后更改其他行的代码。

选择nbr 3时正确的结果 D63为空,因此A63,D64:65中的错误msg不为空,因此没有错误msg Error

选择Nbr 3时的实际结果 D63:65为空,因此A63:65应该显示错误味精 Outcome

Sub Check_SRU_Table()

    ' SRU 0 ** WORKING **
    If Range("SRUAdd").Value = "0" Then
        Range("Sig_1").Value = "Signature Release 1"
        Range("Sig_2").Value = "Signature Release 2"
        Range("Sig_3").Value = "Signature Release 3"
    ' 4 TO 15 OMITTED
    End If


    ' SRU 1 ** WORKING **
    If Range("SRUAdd").Value = "1" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
        End If
    End If

    ' SRU 2 ** NOT WORKING **
    If Range("SRUAdd").Value = "2" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        ElseIf Range("SRUName2").Value = "" Then
            Range("Sig_2").Value = "Signature Release 2 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
            Range("Sig_2").Value = "Signature Release 2"
        End If
    End If

    ' SRU 3 ** NOT WORKING **
    If Range("SRUAdd").Value = "3" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        ElseIf Range("SRUName2").Value = "" Then
            Range("Sig_2").Value = "Signature Release 2 - ERROR"
        ElseIf Range("SRUName3").Value = "" Then
            Range("Sig_3").Value = "Signature Release 3 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
            Range("Sig_2").Value = "Signature Release 2"
            Range("Sig_3").Value = "Signature Release 3"
        End If
    End If
    End Sub

    Private Sub BtnCheck_Click()
        Check_SRU_Table
    End Sub

任何帮助弄清楚我要去哪里的人将不胜感激。

2 个答案:

答案 0 :(得分:1)

将仅满足If...ElseIf...Else块的一个条件。听起来您想检查所有条件。因此,您需要重写为以下内容:

If Range("SRUAdd").Value = "3" Then
    If Range("SRUName1").Value = "" Then
        Range("Sig_1").Value = "Signature Release 1 - ERROR"
    End If
    If Range("SRUName2").Value = "" Then
        Range("Sig_2").Value = "Signature Release 2 - ERROR"
    End If
    If Range("SRUName3").Value = "" Then
        Range("Sig_3").Value = "Signature Release 3 - ERROR"
    End If
    If Range("SRUName3").Value <> "" And Range("SRUName2").Value <> "" And Range("SRUName1").Value <> "" Then
        Range("Sig_1").Value = "Signature Release 1"
        Range("Sig_2").Value = "Signature Release 2"
        Range("Sig_3").Value = "Signature Release 3"
    End If
End If

我敢肯定,有一种更优雅的方法可以做到这一点,但是此版本需要重写的方式最少。

答案 1 :(得分:1)

您的“ SRU 2”和“ SRU 3”不起作用,因为If ... ElseIf ... ElseIf ...(又称if-else-if阶梯)将仅捕获遇到的第一个错误。我认为您想得太过分了。

' SRU 2 ** Try something like this **
If Range("SRUAdd").Value = "2" Then
    If Range("SRUName1").Value = "" Then
        Range("Sig_1").Value = "Signature Release 1 - ERROR"
    Else
        Range("Sig_1").Value = "Signature Release 1"
    End If
    If Range("SRUName2").Value = "" Then
        Range("Sig_2").Value = "Signature Release 2 - ERROR"
    Else
        Range("Sig_2").Value = "Signature Release 2"
    End If
End If