Мой код VBA для текстового поля не включает окончательный ввод в значение ячейки - PullRequest
0 голосов
/ 08 мая 2019
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Worksheets("Sheet1").Range("A1").Value = TextBox1.Value
    If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
        KeyAscii = 0
        MsgBox "Digits only"
    End If
End Sub

Код используется для текстового поля в пользовательской форме.

Вчера я получил некоторую помощь и получил этот полезный фрагмент кода VBA, который прекрасно работает. Однако в этом есть небольшая ошибка. Предполагается, что текстовое поле может принимать только цифры (отсюда KeyAscii >= 48 And KeyAscii <= 57), однако последняя входная цифра не преобразуется в ячейку.

Например, когда вы набираете «1234» в текстовом поле, он записывает только «123» в ячейку и пропускает последнюю цифру.

1 Ответ

4 голосов
/ 08 мая 2019

Эта подпрограмма активируется при нажатии клавиши, поэтому они еще не зарегистрированы как запись в текстовом поле.

Вы можете объединить последний символ (символ нажатия клавиши) со значением ячейки:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Worksheets("Sheet1").Range("A1").Value = TextBox1.Value & chr(KeyAscii)
    If Not (KeyAscii >= 48 And KeyAscii <= 57) Then
        KeyAscii = 0
        MsgBox "Digits only"
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...