2011-05-12 92 views
1

我有一个用于用户输入的多个文本框(这在用户表单中不在电子表格中)。我有几个与货币相关的框,我需要它们显示逗号和小数点,因为用户在框中输入标准。到目前为止,我已经在网上找到了一堆相同的公式,但是当我输入我的数字到盒子里时,它会随着4.00(如果我先打4)和所有我可以改变之后,这是第二个0.这里有一些类似的我看到在线:显示货币的VBA文本框

textbox1 = format(textbox1, "$#,##0.00") 

还出现了一些与cDbl

不管我怎么努力它不会让我输入任何东西比我进入第一个数字更多。我需要帮助。谢谢!

+0

你能告诉我们更多你的代码吗?我没有得到,如果你把'textbox1 =格式(textbox1,“$#,## 0.00)'在控制的变化事件或什么。 – Oneide 2011-05-12 16:23:23

回答

3

格式化为用户键入数据变得非常棘手。输入完成后格式可能会更好。
输入也可以验证和旧值恢复,如果进入视为无效

Dim TextBox1oldValue As String 

Private Sub TextBox1_AfterUpdate() 
    If IsNumeric(TextBox1) Then 
     TextBox1 = Format(TextBox1, "$#,##0.00") 
    Else 
     TextBox1 = TextBox1oldValue 
    End If 
End Sub 

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) 
    If IsNumeric(TextBox1) Then 
     TextBox1oldValue = Format(TextBox1, "$#,##0.00") 
    End If 
End Sub 

Private Sub UserForm_Initialize() 
    TextBox1oldValue = "$0.00" 
    TextBox1 = "$0.00" 
End Sub 
+0

谢谢!这个工作的关键(由于我缺乏知识)是在私人小组中,它不会在他们键入时添加逗号,但正如他们提到的那样,他们可以在开箱后看到格式,这对我来说已经足够了(我希望),所以谢谢。很棒! – bdubb 2011-05-13 12:50:04

1

您需要使用文本框Change事件,如:

Private Sub TextBox1_Change()  
    If TextBox1 = vbNullString Then Exit Sub  
    If IsNumeric(TextBox1) Then CurrencyTransform(TextBox1) 
End Sub 

然后创建CurrencyTransform功能来修改它显示在文本框中。

0

尽量简单,就是...

Private sub textbox1_AfterUpdate() 
    textbox1 = format(textbox1, "$#,##0.00") 
end sub 
0

试试这个:

Private Sub TextBox1_Change() 
    TextBox1.Value = Format(TextBox1.Value, "$#,##0.00") 
End Sub 

这只是为我工作很好,所以它应该对你有所帮助。

如果要执行涉及多个文本框的计算,请勿在文本框名称后面使用.value。相反,在文本框的名称前面使用val(,并在后面加上一个圆括号。我用.value并得到了奇怪的结果。例如,代替TextBox1.Value + TextBox2.Value的100美元,其中TextBox1.Value等于25美元,而TextBox2.Value等于75美元,我会得到“25美元75美元”。