Я разработал UserForm для облегчения ввода данных в один из моих проектов. В этом UF есть текстовый блок , предназначенный для численного значения.VBA UserForm - лучший способ использовать TextBox как десятичный цифровой ввод, независимо от региональных настроек?
Я использую этот код, чтобы избежать текстовых записей:
Private Sub TextBox1_Change()
If Right(Me.TextBox1.Value, 1) = "." Or Right(Me.TextBox1.Value, 1) = "," Or _
Right(Me.TextBox1.Value, 2) = ".0" Or Right(Me.TextBox1.Value, 2) = ",0" Then
Else
Me.TextBox1.Value = Val(Me.TextBox1.Value)
End If
End Sub
Мой вопрос:
В США региональные настройки, это почти работает: я могу ввести десятичное число с десятичный разделитель .
, но каждый раз, когда я вводил нуль после первой цифры справа от разделителя, число усекается до целого числа.
Во французских региональных настройках, я просто не может ввести любой десятичной, это всегда целое число. Я могу отображать .
, .0
, ,
или ,0
в конце, но когда я иду дальше, он получает стирание каждый раз, когда он усекается до целого числа.
Я видел, что мы можем использовать CDbl()
или такие функции тоже, но когда я пытаюсь, я получаю сообщение об ошибке каждый раз, когда вводится письмо. Может быть, CDbl()
с обработчиком ошибок с использованием Val()
было бы достаточно, но я не уверен, и я не могу найти способ сделать это правильно!
Thx мат, это было действительно полезно есть еще один подход к работе! У меня просто небольшая проблема, поскольку я обнаружил, что некоторые персонажи могут иметь один и тот же ключ ... '$ 36 vbKeyHome',' & 38 vbKeyUp', ''39 vbKeyRight' и' (40 vbKeyDown'. Любая идея о том, как avoif this? – R3uK
Какие символы вы имеете в виду? –
Четыре упомянутых мною, $ и Home имеют тот же ключ (36). Я надеялся использовать Right(), но символ еще не введен в поле, поэтому я не знаю, как это избежать! – R3uK