如何在文本框vba中输入1或2位小数后自动标记



我想在输入一个值后将焦点移动到下一个文本框,比如一个小数位,例如";123.4〃;,如果输入的值是文本,则它也不应该移动;abc.e";。有办法吗?

测试下一个代码,请:

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等…

我认为您的目标不是自动制表,而是限制文本框中的输入。如果这是真的,那么这可能会有所帮助。

您可以使用KeyPress事件限制在文本框中按下的键。以下代码将允许ONLY数字和小数,此外还允许导航。

这就是你想要的吗?不需要任何参考来工作

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

如果你仍然想要自动扫描,那么也可以在这里处理。

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

最新更新