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

时间:2017-05-09 08:11:38

标签: excel vba excel-vba

在我的userform中,如果TextBox不包含Numbers或为空,我想要MsgBox。 这是我的代码,但在另一种情况下,TextBox = ""清空MsgBox对我来说,所以我的问题是空的TextBox。

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

4 个答案:

答案 0 :(得分:2)

为此目的使用按键事件。

Private Sub TB1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
End Sub

如果不是数字,此过程将忽略您输入的任何内容,但您可以修改条件和输出。例如,您可能允许输入小数点,或者您可能希望显示一个消息框 - 可能仅在第二次尝试时。

答案 1 :(得分:0)

由于您尝试仅允许“数字”和“空白”,因此下面的代码可以满足您的需求。

func renderer(_ renderer: GMUClusterRenderer, willRenderMarker marker: GMSMarker)

答案 2 :(得分:0)

您可以使用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

答案 3 :(得分:0)

您可以等到用户完成输入,然后测试该字段。

为了便于使用,消息框应替换为标题和图标/图片,如enter image description here“必须在此处输入数字。”

当输入不正确时,这些将显示在文本框旁边。然后在输入更正时隐藏。可以阻止提交表单,直到所有错误都得到纠正。

这允许用户输入请求数据,然后修复任何输入错误。这比每次犯错都要好。

事件已从更改更改为退出

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 测试也已更新。