我想,以检查是否用户在文本框中输入一个数值,小数接受。任何帮助,高度赞赏。
Private Sub textbox1_AfterUpdate()
If IsNumeric(textbox1.Value) = False Then
Me!textbox1.Undo
MsgBox "only numbers are allowed"
Exit Sub
End If
Exit Sub
使用前事件:
Private Sub textbox1_BeforeUpdate(Cancel As Integer)
If IsNumeric(textbox1.Value) = False Then
MsgBox "only numbers are allowed"
Me!textbox1.Undo
Cancel = True
Exit Sub
End If
Exit Sub
我当前的代码根本不会执行。我也试过在textbox1_BeforeUpdate事件。请参阅代码。
新代码:
Public Function IsValidKeyAscii(ByVal keyAscii As Integer, ByVal value As
String) As Boolean
IsValidKeyAscii = (keyAscii = vbKeyDot And InStr(1, value, Chr$(vbKeyDot)) =
0) Or (keyAscii >= vbKey0 And keyAscii <= vbKey9)
End Function
Private Sub textbox1_KeyDown(KeyCode As Integer, Shift As Integer)
If Not IsValidKeyAscii(KeyCode, textbox1.value) Then KeyCode = 0
End Sub
你不应该使用VBA完成这个任务的。
只需设置字段格式属性的常规数字。这是确保用户只能在一个字段中输入数字内置方式。
写一个验证功能(可能是在它自己的KeyInputValidator
类或模块),所以你可以随处重用这个逻辑你需要它,而不是复制/粘贴它需要每一个数字文本框:
Option Explicit
Private Const vbKeyDot As Integer = 46
'@Description("returns true if specified keyAscii is a number, or if it's a dot and value doesn't already contain one")
Public Function IsValidKeyAscii(ByVal keyAscii As Integer, ByVal value As String) As Boolean
IsValidKeyAscii = (keyAscii = vbKeyDot And InStr(1, value, Chr$(vbKeyDot)) = 0) Or (keyAscii >= vbKey0 And keyAscii <= vbKey9)
End Function
然后,在文本框KeyPress
事件处理程序使用它(假设这是一个MSForms
TextBox控件),以确定是否将接受输入 - 因为事件提供一个MSForms.ReturnInteger
对象,该对象的Value
属性可以被设置为0
到‘吞噬’一个按键:
Private Sub TextBox1_KeyPress(ByVal keyAscii As MSForms.ReturnInteger)
If Not IsValidKeyAscii(keyAscii.Value, TextBox1.value) Then keyAscii.Value = 0
End Sub
你不需要撤消任何输入或弹出恼人的警告或消息框这样:在字段中的值保证是一个有效的数值!
编辑上面的事件处理程序的签名是否为一个MSForms
控制。貌似Access使用不同的接口:
Private Sub TextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
在这里,KeyCode
传递ByRef
,这样你就可以直接改变它。换句话说,这变成逻辑:
If Not IsValidKeyAscii(KeyCode, TextBox1.value) Then KeyCode = 0
您可以尝试使用失去焦点的事件:
Private Sub TextBox1_LostFocus()
Dim blnNumber As Boolean
Dim strNumber As String
strNumber = TextBox1.Value
blnNumber = IsNumeric(strNumber)
If Not blnNumber Then
Me!TextBox1.Undo
MsgBox "only numbers are allowed"
Else
'And, if you want to force a decimal.
If InStr(strNumber, ".") < 1 Then
Me!TextBox1.Undo
MsgBox "only doubles are allowed"
End If
End If
End Sub
另外,请检查您在访问列出的Textbox1的元素。是它的名字TextBox1的?或者是其他东西?例如,在Excel中也表示类似如下:=EMBED("Forms.TextBox.1","")
即使该代码引用是TextBox1的名字。