Обнаружить (или зарегистрировать) точку как запятую в текстовом поле с помощью Excel VBA - PullRequest
0 голосов
/ 12 июля 2020

У меня есть пользовательская форма, созданная с помощью Excel VBA, где пользователь вводит некоторые данные, а затем сохраняет их на листе с помощью кнопки. Некоторые поля, которые должен заполнить пользователь, должны иметь только числовые значения c. Чтобы разрешить только числа в этих текстовых полях, я использую следующий код:

Private Sub txtShift1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Debug.Print KeyAscii
  If KeyAscii >= 48 And KeyAscii <= 57 Then
    Debug.Print "number"
  Else
    Debug.Print "other"
    KeyAscii = 0
  End If
End Sub

Однако есть еще одно изменение, которое я хотел бы сделать. Пользователь обычно заполняет эти поля, используя цифровую клавиатуру c, которая имеет точку в качестве десятичного разделителя. В моем регионе запятая используется как десятичный разделитель, и я не могу изменить эту конфигурацию на каждом компьютере, который будет использоваться. Итак, я ищу фрагмент кода, который регистрирует символ точки как запятую при вводе в специальное текстовое поле c. Что-то вроде того, что делает калькулятор Windows 10. Если у вас есть запятые в качестве десятичных разделителей и вы набираете точку на клавиатуре numeri c при ее использовании, вы получаете запятую вместо точки, чтобы легко выполнять вычисления. KeyAscii свойство, но я так и не понял. Приветствуются любые предложения.

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы можете сделать что-то вроде этого:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Debug.Print KeyAscii
  If (KeyAscii >= 48 And KeyAscii <= 57) Then
    Debug.Print "number"
  ElseIf KeyAscii = 44 Then
    Debug.Print "comma"
    If Application.DecimalSeparator = "." Then
        Debug.Print "switching to period..."
        KeyAscii = 46
    End If
  ElseIf KeyAscii = 46 Then
    Debug.Print "period"
    If Application.DecimalSeparator = "," Then
        Debug.Print "switching to comma..."
        KeyAscii = 44
    End If
  Else
    Debug.Print "other"
    KeyAscii = 0
  End If
End Sub
0 голосов
/ 12 июля 2020

Попробуйте Application.DecimalSeparator = ","

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...