问题描述
我想输入一个小数点后一位的值,例如,将焦点移到下一个文本框。同样,如果输入的值是文本,例如“ 123.4”,它也不应移动。 “ abc.e”。有什么办法吗?
解决方法
我认为您的目标不是关于自动贴标签,而是限制文本框中的输入。如果是这样,那可能会有所帮助。
您可以使用KeyPress
事件来限制在文本框中按下的键。以下代码除了导航外,还允许仅个数字和十进制。
这是您要尝试的吗?不需要任何参考即可工作
Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case vbKey0 To vbKey9,vbKeyBack,vbKeyClear,vbKeyDelete,_
vbKeyLeft,vbKeyRight,vbKeyUp,vbKeyDown,vbKeyTab
If KeyAscii = 46 Then If InStr(1,TextBox1.Text,".") Then KeyAscii = 0
Case Else
KeyAscii = 0
Beep
End Select
End Sub
如果您仍然想要自动标签,则也可以在此处进行处理。
,请测试下一个代码,
Private Sub TextBox1_Change()
If Len(Me.TextBox1.Text) >= 3 Then
If IsNumeric(Me.TextBox1.Text) And _
Right(Me.TextBox1.Text,3) Like "#.#" Then
'controlX.SetFocus
'Me.txtTest.SetFocus
End If
End If
End Sub
我认为,将其与@Siddharth Rout发布的上述事件(不允许使用除数字以外的其他字符)一起使用将是您的理想解决方案。在这种情况下,IsNumeric(...)
检查可能会丢失。
如果您需要使它允许两位小数,则只需将“#。#”替换为“#。##”并加上Len(...) >= 4
,依此类推...
是的,可以。您可以使用Regular Expressions
。
'needs reference to MS VBScript Regular Expressions 5.5
Private Sub TextBox1_Change()
Dim spattern As String,sText As String
Dim r As RegExp
Dim bResult As Boolean
If Len(TextBox1.Text) < 3 Then Exit Sub
sText = TextBox1.Text
'define pattern
spattern = "\d{1,}" & Application.DecimalSeparator & "\d{1,2}"
Set r = New RegExp
With r
.pattern = spattern
bResult = .Test(sText)
End With
If bResult Then
'move focus to the next control
End If
End Sub