Excel 错误检查的If语句不起作用

Excel 错误检查的If语句不起作用,excel,vba,Excel,Vba,我需要做一些错误检查,以便用户在发送表单之前知道他们遗漏了一些信息 我有一个由数据验证列表下拉框控制的表。此框包含数字1至15,并将显示/隐藏与所选数字(即所选3)关联的行,因此将显示第1至3行、第4至15行或隐藏第1至3行。错误检查代码应该做的是,检查所选列表编号,然后检查每行中的一个单元格是否为空,如果为空则显示错误消息,如果为空则不执行任何操作。我需要为显示的每一行显示此错误消息,而不是为隐藏行显示此错误消息。我在页面顶部有一个单元格,告诉用户他们有多少错误,所以我不希望隐藏的行添加到此计

我需要做一些错误检查,以便用户在发送表单之前知道他们遗漏了一些信息

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

选择nbr 3时结果正确 D63为空,因此A63中的错误消息,D64:65不为空,因此无错误消息

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


如果您能帮助我找出哪里出了问题,我们将不胜感激。

您的
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
如果范围(“SRUAdd”).Value=“3”,则
如果范围(“SRUName1”).Value=”“,则
范围(“Sig_1”).Value=“签名版本1-错误”
如果结束
如果范围(“SRUName2”).Value=”“,则
范围(“Sig_2”).Value=“签名版本2-错误”
如果结束
如果范围(“SRUName3”).Value=“”,则
范围(“Sig_3”).Value=“签名版本3-错误”
如果结束
如果范围(“SRUName3”).Value”和范围(“SRUName2”).Value”和范围(“SRUName1”).Value”,则
范围(“Sig_1”).Value=“签名版本1”
范围(“Sig_2”).Value=“签名版本2”
范围(“Sig_3”).Value=“签名版本3”
如果结束
如果结束

我相信有一种更优雅的方法可以做到这一点,但是这个版本需要对您选择的方法进行最少的重写。

您的
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
如果范围(“SRUAdd”).Value=“3”,则
如果范围(“SRUName1”).Value=”“,则
范围(“Sig_1”).Value=“签名版本1-错误”
如果结束
如果范围(“SRUName2”).Value=”“,则
范围(“Sig_2”).Value=“签名版本2-错误”
如果结束
如果范围(“SRUName3”).Value=“”,则
范围(“Sig_3”).Value=“签名版本3-错误”
如果结束
如果范围(“SRUName3”).Value”和范围(“SRUName2”).Value”和范围(“SRUName1”).Value”,则
范围(“Sig_1”).Value=“签名版本1”
范围(“Sig_2”).Value=“签名版本2”
范围(“Sig_3”).Value=“签名版本3”
如果结束
如果结束
我相信有一种更优雅的方法可以做到这一点,但是这个版本需要对您选择的方法进行最少的重写。

您的“SRU 2”和“SRU 3”无法工作,因为
如果。。。如果。。。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
您的“SRU 2”和“SRU 3”不工作,因为
如果。。。如果。。。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

如果您使用的是
If…ElseIf…Else
,那么在它脱离代码块之前,您只能满足其中一个条件。如果您使用的是
If…ElseIf…Else
,那么在它脱离代码块之前,您只能满足其中一个条件。是的,这样做了,谢谢,您是对的,我完全想得太多了!!我还是一个新手,仍然在关注VBA:-)@stacson76酷!你可能会发现两个网站对VBA很有帮助,分别是和。是的,成功了,谢谢,你说得对,我想得太多了!!我还是一个新手,仍然在关注VBA:-)@stacson76酷!有两个网站对VBA很有帮助,分别是和。嗨,马克,谢谢你的回复。不幸的是,这仍然不起作用,我得到了相同的输出,只有第一个给出了错误。我已经实现了上面的解决方案,所以很高兴使用它来代替它——虽然冗长,但它仍然有效。嗨,马克,谢谢你的回复。不幸的是,这仍然不起作用,我得到了相同的输出,只有第一个给出了错误。我已经实现了上面的解决方案,非常乐意使用它——虽然冗长,但它仍然有效。