Vba 键入时在文本框中设置数字格式

Vba 键入时在文本框中设置数字格式,vba,excel,numbers,format,Vba,Excel,Numbers,Format,有什么方法可以在您键入时格式化文本框(在用户窗体上)中的数字? 这样就很容易看到输入的数字 我想要的格式是:#,##0.00对于新手来说,这可以被认为是一个稍微“高于平均水平”的问题,所以我要回答这个:) VBA没有所谓的屏蔽文本框,您可以在其中将格式设置为,##0.00。你只能做一个蒙面文本框来接受密码,但那完全是另一回事 这是我很快想到的。希望这就是你想要的 Dim CursorPosition As Long Dim boolSkip As Boolean Dim countCheck A

有什么方法可以在您键入时格式化文本框(在用户窗体上)中的数字?

这样就很容易看到输入的数字


我想要的格式是:
#,##0.00

对于新手来说,这可以被认为是一个稍微“高于平均水平”的问题,所以我要回答这个:)

VBA没有所谓的屏蔽文本框,您可以在其中将格式设置为
,##0.00
。你只能做一个蒙面文本框来接受密码,但那完全是另一回事

这是我很快想到的。希望这就是你想要的

Dim CursorPosition As Long
Dim boolSkip As Boolean
Dim countCheck As Long

Private Sub TextBox1_Change()
    '~~> This avoids refiring of the event
    If boolSkip = True Then
        boolSkip = False
        Exit Sub
    End If

    '~~> Get current cursor postion
    CursorPosition = TextBox1.SelStart
    boolSkip = True

    '~~> Format the text
    TextBox1.Text = Format(TextBox1.Text, "#,##0.00")

    '~~> Re-position the cursor
    If InStr(1, TextBox1.Text, ".") - 1 > 0 Then _
    TextBox1.SelStart = InStr(1, TextBox1.Text, ".") - 1
End Sub
您也可以通过包含此代码将其提升到更高的级别。这确保用户只键入数字

'~~> Numeric Textbox with Decimal Check
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 Text1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode > 47 And KeyCode < 58 Then
        Text1.Tag = Text1.Tag & Chr$(KeyCode)
    ElseIf KeyCode = vbKeyBack And Len(Text1.Tag) > 0 Then
        Text1.Tag = Left$(Text1.Tag, Len(Text1.Tag) - 1)
    End If

    Text1 = FormatCurrency$(Val(Text1.Tag) / 100, 2, vbTrue, vbFalse, vbTrue)
    Text1.SelStart = 65535
    KeyCode = 0

End Sub
Private Sub Text1_KeyDown(ByVal KeyCode作为MSForms.ReturnInteger,ByVal Shift作为Integer)
如果KeyCode>47且KeyCode<58,则
Text1.Tag=Text1.Tag&Chr$(键码)
ElseIf KeyCode=vbKeyBack和Len(Text1.Tag)>0然后
Text1.Tag=Left$(Text1.Tag,Len(Text1.Tag)-1)
如果结束
Text1=FormatCurrency$(Val(Text1.Tag)/100,2,vbTrue,vbFalse,vbTrue)
Text1.SelStart=65535
KeyCode=0
端接头

亲爱的Siddharth,这正是我们所需要的。非常感谢。愿上帝保佑你和你的家人:)然而,我正在通过双击每个文本框并通过将文本框1更改为文本框2来手动将代码添加到每个文本框的私有模块中。我们有没有办法将上述代码用于userform上的所有文本框?您需要的是希望它能有所帮助:)