在文本框VBA中输入1或2个小数位后,如何自动制表?

问题描述

我想输入一个小数点后一位的值,例如,将焦点移到下一个文本框。同样,如果输入的值是文本,例如“ 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