我需要进行一些错误检查,以便用户知道在发送表单之前他们已经错过了一些信息。
我有一个表,该表由数据验证列表下拉框控制。此框的编号为1到15,将显示/隐藏与所选编号相关的行,即所选的3,因此显示1到3的行,4到15或隐藏行。错误检查代码应该执行的操作是,检查选定的列表号,然后检查每行中的一个单元格以查看其是否为空,如果为空,则显示错误消息,否则为空。我需要针对显示的每一行而不是隐藏的行显示此错误消息。我在页面顶部有一个单元格,用于告诉用户他们有多少错误,所以我不希望将隐藏行添加到此计数中。我可以使它适用于数字零和1,但对于2到15则不起作用。下面的代码仅显示数字0到3,我可以在工作后更改其他行的代码。
选择nbr 3时正确的结果 D63为空,因此A63,D64:65中的错误msg不为空,因此没有错误msg
选择Nbr 3时的实际结果 D63:65为空,因此A63:65应该显示错误味精
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
任何帮助弄清楚我要去哪里的人将不胜感激。
答案 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