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

Posted

技术标签:

【中文标题】VBA 代码检查 TextBox 是不是为空,如果是则不允许用户继续【英文标题】:VBA code checks if TextBox is empty, if so does not allow user to continueVBA 代码检查 TextBox 是否为空,如果是则不允许用户继续 【发布时间】:2018-10-07 08:10:29 【问题描述】:

我有一个带有多个文本框的用户表单。如果 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 继续运行并将 TextBoxes 的值插入到工作表中。如果出现消息框,我想如果没有发生这种情况。

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

当使用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 中文本的长度!


注意事项:

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

    访问内容时最好使用TextBox.ValueTextBox.Text 而不是TextBox

    当前对TextBox1 内容的检查只会在TextBox1 为空时导致MsgBox。这排除空白字符,例如空格。如果您在只有空白字符时还想要 MsgBox,您应该尝试类似:Len(Trim(TextBox1.Value)) = 0,而不是之前的 (Len(TextBox1) = "")。

    您可以查看此here 的其他建议如果您不想触发MsgBox(如果它们有空格字符),您可能还想考虑在TextBox2TextBox3 上添加类似的检查,但不是任何非空白字符。


Private Sub SubmitCommandButtom_Click()

'Changed Len(TextBox1) = "" to Len(TextBox1.Value) = 0 as per explanation above.
'Added .Value to length checks
If Len(TextBox1.Value) = 0 And (Len(TextBox2.Value) > 0 Or Len(TextBox3.Value) > 0) Then
    MsgBox "Unit Number must be entered to continue!"
Else
    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
    'And any other code ....
End If

【讨论】:

非常感谢@Mistella!这很好用,根据您的解释,我能够按照您的建议将相同的逻辑应用于文本框 2 和 3。【参考方案2】:

替换:

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

与:

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

【讨论】:

以上是关于VBA 代码检查 TextBox 是不是为空,如果是则不允许用户继续的主要内容,如果未能解决你的问题,请参考以下文章

vba textbox在失去焦点后如何重新获取焦点

VBA DAO.Recordset 在尝试关闭它时为空或未设置 - 但我事先检查它是不是为空

VBA - 变量获取 ComboBox 值,否则获取 TextBox 值错误

(ASP.NET 、 VS2008)JS(javascript) 判断 TextBox 是不是为空。求 JS 代码。

Access 2016 VBA 文本框为空

以下代码失败(Excel VBA)x = 1如果Textbox.Value = x则...