如何将 TextBox 输入限制为数值?
How to limit TextBox input to a numeric value?
我有代码可以在多页中创建文本框:
Private Sub CommandButton1_Click()
RowChar = 70
MultiPage1.Pages.Clear
For i = 0 To TextBox1.Value - 1
MultiPage1.Pages.Add
MultiPage1.Pages(i).Caption = "Variable" & i + 1
Call LabelPerPage
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "NameBox")
With txtbx
.Top = 20
.Left = 100
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MinBox")
With txtbx
.Top = 50
.Left = 100
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "LsbBox")
With txtbx
.Top = 20
.Left = 300
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MaxBox")
With txtbx
.Top = 50
.Left = 300
End With
If i = 0 Then
FormulaString = "= C15"
Else
FormulaString = FormulaString & " " & Chr(RowChar) & "15"
RowChar = RowChar + 3
End If
Next i
TextBox2.Value = FormulaString
End Sub
Private Sub LabelPerPage()
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 20
.Left = 50
.Caption = "NAME:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 50
.Left = 50
.Caption = "MIN:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 20
.Left = 250
.Caption = "LSB:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 50
.Left = 250
.Caption = "MAX:"
End With
End Sub
我试图在其中创建一个页面和文本框,我的问题是我无法在 TextBox 上执行 KeyPress,因为它只会根据我的代码自动创建。
目标:
1.) TextBox 不能输入数字值或字母时执行 KeyPress。
2.) 我想比较两个文本框,textbox1 应该最小到 textbox2
我试过这个:
选项 1:
Private Sub MaxBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii > 46 And KeyAscii < 58) Or KeyAscii = 43 Then
KeyAscii = KeyAscii
Else
KeyAscii = 0
MsgBox "Invalid key pressed, you can enter numbers only"
End If
End Sub
选项 2:
Private Sub OnlyNumbers()
If TypeName(Me.ActiveControl) = "MaxBox" Then
With Me.ActiveControl
If Not IsNumeric(.Value) And .Value <> vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If
End Sub
为什么不完全放弃 keyPress
,因为您唯一想要实现的只是数字输入?你可以在你的用户表单代码中做这样的事情:
Option Explicit
'Variable to capture Change event from your textbox:
Private WithEvents maxbox As MSForms.TextBox
'The creation of the thing; I just created a multipage control to reuse your lines.
Private Sub UserForm_Initialize()
Dim txtbox as MSForms.TextBox
Dim i As Integer
i = 0
Set txtbox = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MaxBox")
With txtbox
.Top = 50
.Left = 50
End With
Set maxbox = txtbox
End Sub
'Capture change of maxbox:
Private Sub maxbox_Change()
'In case somebody entered something non-numeric:
If IsNumeric(maxbox.Text) = False Then
'Remove the input character
maxbox.Text = Left(maxbox.Text, Len(maxbox.Text) - 1)
'And alert the user
MsgBox "numeric only!"
End If
End Sub
如果您需要多个,您也可以在捕获事件的地方创建一个自定义 class,然后将那个 class 的 collection
添加到用户表单。为此,您可以查看答案
编辑: 对于后半部分(针对 Minbox 进行验证),您可以使用相同的事件:只需添加另一个 if
语句以确保数值为 > CInt(minbox.text)
(或其他数字类型)。
编辑 2: 如果字符串的长度为 0(即当有人按下退格键/删除键时),您可能需要为 Left(maxbox.Text, Len(maxbox.Text) - 1)
位添加错误处理触发更改事件)。
我有代码可以在多页中创建文本框:
Private Sub CommandButton1_Click()
RowChar = 70
MultiPage1.Pages.Clear
For i = 0 To TextBox1.Value - 1
MultiPage1.Pages.Add
MultiPage1.Pages(i).Caption = "Variable" & i + 1
Call LabelPerPage
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "NameBox")
With txtbx
.Top = 20
.Left = 100
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MinBox")
With txtbx
.Top = 50
.Left = 100
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "LsbBox")
With txtbx
.Top = 20
.Left = 300
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MaxBox")
With txtbx
.Top = 50
.Left = 300
End With
If i = 0 Then
FormulaString = "= C15"
Else
FormulaString = FormulaString & " " & Chr(RowChar) & "15"
RowChar = RowChar + 3
End If
Next i
TextBox2.Value = FormulaString
End Sub
Private Sub LabelPerPage()
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 20
.Left = 50
.Caption = "NAME:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 50
.Left = 50
.Caption = "MIN:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 20
.Left = 250
.Caption = "LSB:"
End With
Set txtbx = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.Label.1")
With txtbx
.Top = 50
.Left = 250
.Caption = "MAX:"
End With
End Sub
我试图在其中创建一个页面和文本框,我的问题是我无法在 TextBox 上执行 KeyPress,因为它只会根据我的代码自动创建。
目标:
1.) TextBox 不能输入数字值或字母时执行 KeyPress。
2.) 我想比较两个文本框,textbox1 应该最小到 textbox2
我试过这个:
选项 1:
Private Sub MaxBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii > 46 And KeyAscii < 58) Or KeyAscii = 43 Then
KeyAscii = KeyAscii
Else
KeyAscii = 0
MsgBox "Invalid key pressed, you can enter numbers only"
End If
End Sub
选项 2:
Private Sub OnlyNumbers()
If TypeName(Me.ActiveControl) = "MaxBox" Then
With Me.ActiveControl
If Not IsNumeric(.Value) And .Value <> vbNullString Then
MsgBox "Sorry, only numbers allowed"
.Value = vbNullString
End If
End With
End If
End Sub
为什么不完全放弃 keyPress
,因为您唯一想要实现的只是数字输入?你可以在你的用户表单代码中做这样的事情:
Option Explicit
'Variable to capture Change event from your textbox:
Private WithEvents maxbox As MSForms.TextBox
'The creation of the thing; I just created a multipage control to reuse your lines.
Private Sub UserForm_Initialize()
Dim txtbox as MSForms.TextBox
Dim i As Integer
i = 0
Set txtbox = UserForm1.MultiPage1.Pages(i).Controls.Add("Forms.TextBox.1", "MaxBox")
With txtbox
.Top = 50
.Left = 50
End With
Set maxbox = txtbox
End Sub
'Capture change of maxbox:
Private Sub maxbox_Change()
'In case somebody entered something non-numeric:
If IsNumeric(maxbox.Text) = False Then
'Remove the input character
maxbox.Text = Left(maxbox.Text, Len(maxbox.Text) - 1)
'And alert the user
MsgBox "numeric only!"
End If
End Sub
如果您需要多个,您也可以在捕获事件的地方创建一个自定义 class,然后将那个 class 的 collection
添加到用户表单。为此,您可以查看答案
编辑: 对于后半部分(针对 Minbox 进行验证),您可以使用相同的事件:只需添加另一个 if
语句以确保数值为 > CInt(minbox.text)
(或其他数字类型)。
编辑 2: 如果字符串的长度为 0(即当有人按下退格键/删除键时),您可能需要为 Left(maxbox.Text, Len(maxbox.Text) - 1)
位添加错误处理触发更改事件)。