Текстовое поле VBA с отображением валюты - PullRequest
1 голос
/ 12 мая 2011

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 13 мая 2011

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

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
1 голос
/ 12 мая 2011

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

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

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

0 голосов
/ 13 апреля 2015

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

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 долларов».

0 голосов
/ 25 октября 2013

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

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