VBA代码检查TextBox是否为空,如果是,则不允许用户继续

时间:2018-04-26 14:55:13

标签: excel-vba vba excel

我有一个包含多个文本框的用户表单。如果TextBox2和/或TextBox3中有任何内容,我想要一个消息框,但TextBox1中没有任何内容。如果用户在发生这种情况时无法继续,我也会喜欢它。

这是我目前的代码:

Private Sub SubmitCommandButtom_Click()
If Len(TextBox1) = "" And Len(TextBox2) > 0 Or Len(TextBox3) > 0 Then
    MsgBox "Unit Number must be entered to continue!"
End If
Sheets("Uneven Split Job Aid").Range("A2") = TextBox1.Value
Sheets("Uneven Split Job Aid").Range("B2") = TextBox2.Value
Sheets("Uneven Split Job Aid").Range("C2") = TextBox3.Value

此代码目前仅在Textbox3中存在值而不在TextBox1中时生成消息框,如果TextBox2中有任何内容则无关紧要。我想要检查TextBox2的值。此外,当我在消息框上单击“确定”时,Sub继续运行并将TextBox的值插入到工作表中。如果出现消息框,我想不会发生这种情况。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

使用And / Or布尔逻辑时,有时需要使用括号来确保正确计算它。当它是:

If Con1 And Con2 Or Con3 Then

正在被解释:

  • Con1Con2都是真的吗?

或者

  • Con3是真的吗?

所以,我添加括号来阅读:

If Con1 And (Con2 Or Con3) Then

将被解释为:

  • Con1是真的吗?

  • Con2Con3是真的吗?

如果我理解你的问题,那就是你的目标逻辑。但是,这确实意味着如果TextBox2Textbox3都为空,那么TextBox1是否有任何内容都无关紧要; MsgBox 不会发生,其余代码将会发生。

进一步的布尔分析:

由于Con1 - Len(TextBox1) = "" - 始终解析为False (请参阅下面的注释1)And检查 - Con1 And Con2总是false。因此,if语句可以解析为true的唯一方法是Con3解析为True

由于Con3Len(TextBox3) > 0,因此整个if语句取决于TextBox3中文本的长度!

注意:

  1. Len(TextBox1) = ""将始终等于false。 Len()返回的数字不是字符串。我认为你偶然结合了两种检查空字符串的方法。 TextBox1.Value = ""Len(TextBox1.Value) = 0都有效;但是,这种组合没有意义。 虽然在我发现这个问题之前,我花了大部分时间来打听我的答案。

  2. 最好在访问内容时使用TextBox.ValueTextBox.Text而非TextBox

  3. 仅当TextBox1为空时,您对MsgBox内容的当前检查才会导致TextBox1。此排除空格字符,例如空格。如果在只有空格字符时也需要MsgBox,则应尝试使用Len(Trim(TextBox1.Value)) = 0而不是之前的Len(TextBox1) = "")。

    您可以查看有关此问题的其他建议here如果您不想触发{{1},您可能还需要考虑在TextBox2TextBox3上添加类似的检查如果他们有空白字符,但没有任何非空白字符。

  4. MsgBox

答案 1 :(得分:0)

替换:

If Len(TextBox1) = "" And Len(TextBox2 & TextBox3)  > 0 Then

使用:

@Injectable()