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
正在解释:
Con1
和 Con2
都是真的吗?
或者
Con3
是真的吗?
所以,我添加了括号来阅读:
If Con1 And (Con2 Or Con3) Then
这将被解释为:
Con1
是真的吗?
和
Con2
或 Con3
是真的吗?
如果我正确理解了您的问题,这就是您的目标逻辑。然而,这确实意味着如果TextBox2
和Textbox3
都是空的,那么TextBox1
是否有任何东西都无关紧要; MsgBox
不会发生,其余代码会发生。
进一步的布尔分析:
由于Con1
-- Len(TextBox1) = ""
-- 总是解析为False
(见下面的注1),And
检查 -- Con1 And Con2
总是false
.因此,if
语句可以解析为 true
的唯一方法是 Con3
解析为 True
。
由于Con3
是Len(TextBox3) > 0
,整个if 语句取决于TextBox3
中文本的长度!
注意事项:
Len(TextBox1) = ""
将始终等于 false。 Len()
返回一个数字而不是字符串。我认为您将两种方法结合起来检查空字符串。 TextBox1.Value = ""
或 Len(TextBox1.Value) = 0
都可以;但是,这种组合没有意义。 虽然在我发现这个之前我花了大部分时间输入我的答案。
访问内容时最好使用TextBox.Value
或TextBox.Text
而不是TextBox
。
当前对TextBox1
内容的检查只会在TextBox1
为空时导致MsgBox
。这排除空白字符,例如空格。如果您在只有空白字符时还想要 MsgBox
,您应该尝试类似:Len(Trim(TextBox1.Value)) = 0
,而不是之前的 (Len(TextBox1) = ""
)。
您可以查看此here 的其他建议如果您不想触发MsgBox
(如果它们有空格字符),您可能还想考虑在TextBox2
和TextBox3
上添加类似的检查,但不是任何非空白字符。
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 DAO.Recordset 在尝试关闭它时为空或未设置 - 但我事先检查它是不是为空
VBA - 变量获取 ComboBox 值,否则获取 TextBox 值错误