Текстовое поле VBA, отображающее валюту

У меня есть форма с несколькими текстовыми полями для ввода пользователем (это в пользовательской форме, а не в электронной таблице). У меня есть несколько полей, связанных с валютой, и мне нужно, чтобы они отображали запятую и десятичную точку, когда пользователь вводит свои критерии в поле. До сих пор я нашел кучу одних и тех же формул в Интернете, но когда я ввожу свое число в поле, оно идет с 4,00 (если я сначала нажму 4), и все, что я могу изменить после этого, это второй 0. Вот что-то похожее, которое я вижу онлайн:

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

Также видел некоторых с cDbl

Что бы я ни пытался, это не позволит мне ввести ничего, кроме первого числа, которое я введу. Мне нужна помощь. Спасибо!


person bdubb    schedule 12.05.2011    source источник
comment
Не могли бы вы показать нам больше вашего кода? Я не понял, помещаете ли вы textbox1 = format(textbox1, "$#,##0.00) в событие изменения элемента управления или что-то в этом роде.   -  person Oneide    schedule 12.05.2011


Ответы (4)


Форматирование по мере того, как пользователь вводит данные, становится очень сложным. Может быть лучше отформатировать после завершения ввода.
Ввод также можно проверить и восстановить старое значение, если ввод признан недействительным.

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
person chris neilsen    schedule 13.05.2011
comment
Спасибо! Ключ к этой работе (с моим недостатком знаний) должен был находиться в приватной сабвуфере. Он не будет добавлять запятые по мере ввода, но, как уже упоминалось, они могут видеть формат после табуляции из коробки, и этого мне достаточно (надеюсь). Так что спасибо. Вы молодцы! - person bdubb; 13.05.2011

Вам нужно использовать событие TextBox Change, например:

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

Затем вы создаете функцию CurrencyTransform для изменения того, что она показывает в TextBox.

person Lance Roberts    schedule 12.05.2011

Попробуйте просто это...

Private sub textbox1_AfterUpdate()
    textbox1 = format(textbox1, "$#,##0.00")
end sub
person Eduardo Guarana    schedule 25.10.2013

Попробуй это:

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

Это сработало для меня просто отлично, так что это должно помочь и вам.

Если вы хотите выполнять вычисления с несколькими текстовыми полями, не используйте .value после имени текстового поля. Вместо этого используйте val( перед именем текстового поля, а за ним заключительную круглую скобку. Я использовал .value и получил странные результаты. Вместо, например, 100 долларов за TextBox1.Value + TextBox2.Value, где TextBox1.Value равно 25 долларам, а TextBox2.Value равно 75 долларам, я бы получил «25 долларов 75 долларов».

person Jacob    schedule 12.04.2015