Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA UserForm文本框仅允许数字和空文本_Vba_Excel - Fatal编程技术网

VBA UserForm文本框仅允许数字和空文本

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)

在我的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)
            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_更改
代码就会被执行,每次你的代码改变文本框的值(例如初始化它)时,它也会被调用。你的答案当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。你的答案当然值得一点解释。请参阅。评论将有助于创建可搜索的内容。