VBA UserForm文本框仅允许数字和空文本
在我的userform中,如果文本框不包含数字或为空,我希望使用MsgBox。 这是我的代码,但在另一种情况下,当VBA UserForm文本框仅允许数字和空文本,vba,excel,Vba,Excel,在我的userform中,如果文本框不包含数字或为空,我希望使用MsgBox。 这是我的代码,但在另一种情况下,当TextBox=“清空MsgBox时,我看到的是空文本框,因此我的问题是空文本框 Private Sub TB1_Change() If TypeName(Me.TB1) = "TextBox" Then With Me.ActiveControl L12.Caption = Val(TB1.Text) * Val(TB2.Text)
TextBox=“
清空MsgBox时,我看到的是空文本框,因此我的问题是空文本框
Private Sub TB1_Change()
If TypeName(Me.TB1) = "TextBox" Then
With Me.ActiveControl
L12.Caption = Val(TB1.Text) * Val(TB2.Text)
If Not IsNumeric(.Value) And .Value <> vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If
End Sub
Private Sub-TB1_Change()
如果TypeName(Me.TB1)=“TextBox”,则
和我一起。主动控制
L12.Caption=Val(TB1.Text)*Val(TB2.Text)
如果不是数值(.Value)和.Value vbNullString,则
MsgBox“对不起,只允许数字”
.Value=vbNullString
如果结束
以
如果结束
端接头
为此,请使用按键事件
Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
End Sub
如果输入的不是数字,此过程将忽略任何内容,但您可以修改条件和输出。例如,您可能允许输入一个小数点,或者您可能希望显示一个消息框-可能仅在第二次尝试时显示。为此目的使用按键事件
Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
End Sub
如果输入的不是数字,此过程将忽略任何内容,但您可以修改条件和输出。例如,您可能允许输入一个小数点,或者您可能希望显示一个消息框-可能仅在第二次尝试时显示。由于您尝试只允许“数字”和“空白”,因此下面的代码将满足您的需要
Private Sub TB1_Change()
if IsNumeric(Me.TB1.Value) = True or Me.TB1.Value = vbNullString then
'Good data, nothing to MSG
Else
MsgBox "Your input data is not valid"
Endif
End Sub
由于您试图只允许“数字”和“空白”,因此下面的代码将满足您的需要
Private Sub TB1_Change()
if IsNumeric(Me.TB1.Value) = True or Me.TB1.Value = vbNullString then
'Good data, nothing to MSG
Else
MsgBox "Your input data is not valid"
Endif
End Sub
您可以使用
AfterUpdate
事件处理程序而不是Change
事件,也可以使用Exit
事件,并在用户输入无效值时取消退出:
Option Explicit
Private Sub TB1_AfterUpdate()
'Check whether the value is numeric or empty:
If Not IsValNumeric(Me.TB1.Value) Then
MsgBox "Sorry, only numbers allowed"
Me.TB1.Value = vbNullString
Else:
'Do something...
MsgBox val(TB1.Text) * val(TB2.Text)
End If
End Sub
Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Prevents the user from EXIT the TextBox if value is not numeric/empty
Cancel = Not IsNumeric(Me.TB1.Value)
End Sub
Private Function IsValNumeric(val$) As Boolean
Dim ret As Boolean
'check for numeric value only and allow empty value as a zero value
ret = IsNumeric(val) Or Len(val) = 0
IsValNumeric = ret
End Function
您可以使用
AfterUpdate
事件处理程序而不是Change
事件,也可以使用Exit
事件,并在用户输入无效值时取消退出:
Option Explicit
Private Sub TB1_AfterUpdate()
'Check whether the value is numeric or empty:
If Not IsValNumeric(Me.TB1.Value) Then
MsgBox "Sorry, only numbers allowed"
Me.TB1.Value = vbNullString
Else:
'Do something...
MsgBox val(TB1.Text) * val(TB2.Text)
End If
End Sub
Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Prevents the user from EXIT the TextBox if value is not numeric/empty
Cancel = Not IsNumeric(Me.TB1.Value)
End Sub
Private Function IsValNumeric(val$) As Boolean
Dim ret As Boolean
'check for numeric value only and allow empty value as a zero value
ret = IsNumeric(val) Or Len(val) = 0
IsValNumeric = ret
End Function
您可以等待用户完成输入,然后测试字段 为便于使用,消息框应替换为标题和图标/图片,如“此处必须输入数字” 当输入不正确时,这些将显示在文本框旁边。然后在纠正输入时隐藏。在更正所有错误之前,可以阻止表单的提交 这允许用户输入请求数据,然后修复任何输入错误。这比每次他们犯错误都阻止他们要好 事件从Change更改为Exit
Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TypeName(Me.TB1) = "TextBox" Then
With Me.ActiveControl
L12.Caption = Val(TB1.Text) * Val(TB2.Text)
If Not IsNumeric(.Value) Or .Value = vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If
End Sub
vbNullString测试也已更新。您可以等待用户完成输入,然后测试该字段 为便于使用,消息框应替换为标题和图标/图片,如“此处必须输入数字” 当输入不正确时,这些将显示在文本框旁边。然后在纠正输入时隐藏。在更正所有错误之前,可以阻止表单的提交 这允许用户输入请求数据,然后修复任何输入错误。这比每次他们犯错误都阻止他们要好 事件从Change更改为Exit
Private Sub TB1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TypeName(Me.TB1) = "TextBox" Then
With Me.ActiveControl
L12.Caption = Val(TB1.Text) * Val(TB2.Text)
If Not IsNumeric(.Value) Or .Value = vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If
End Sub
vbNullString测试也已更新。什么是
MsgBox“对不起,只允许数字,但您输入了'&.Value&'。“
在'之间写入”
?用我发布的代码替换您的MsgBox代码。运行您的代码,告诉我们当您的文本框为空时MsgBox中有什么。不应该与我一起使用。ActiveControl
与我一起使用。TB1
-目前它使用的是ActiveControl
的值,而不是文本框的值。我想您可能需要重新访问您的设计。每当你按下非法键时,就会弹出一个消息框,这和frick一样令人讨厌。@Sagy.K-你仍然应该重新考虑你的设计-每当用户在文本框中输入字符(如果他们键入“hello”)或删除字符时,TB1_更改
代码就会被执行,每次您的代码更改文本框的值(例如初始化文本框)时,它也会被调用。MsgBox“对不起,只允许输入数字,但您输入了&.value&.”“
在之间写入”
?用我发布的代码替换您的MsgBox代码。运行您的代码,告诉我们当您的文本框为空时MsgBox中有什么。不应该与我一起使用。ActiveControl
与我一起使用。TB1
-目前它使用的是ActiveControl
的值,而不是文本框的值。我想您可能需要重新访问您的设计。每当你按下非法键时,就会弹出一个消息框,这和frick一样令人讨厌。@Sagy.K-你仍然应该重新考虑你的设计-每当用户在文本框中输入字符(如果他们键入“hello”)或删除字符时,TB1_更改
代码就会被执行,每次你的代码改变文本框的值(例如初始化它)时,它也会被调用。你的答案当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。你的答案当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。