разрешить только цифры и косую черту в текстовом поле VBA - PullRequest
0 голосов
/ 16 октября 2018

Следующий код позволяет набирать только цифры TextBox1.Но TextBox1 для вставки истории (Дата), и я хочу с форматом «0000/00/00».Как я могу исключить "/" из IsNumeric в сообщении об ошибке?

Private Sub textbox1_Change()
If Not IsNumeric(TextBox1.Value) Then
   MsgBox "only numbers allowed"
   With TextBox1
  .SetFocus
  .SelStart = 0
  .SelLength = Len(.Text)
   End With
End If
Dim strTemp As String
If TextBox1.TextLength = 8 Then
  Me.TextBox1.Value = Format(Me.TextBox1.Value, "0000/00/00")
End If
End Sub

1 Ответ

0 голосов
/ 16 октября 2018

Используйте событие KeyPress или KeyDown (возможно, проще использовать KeyPress), чтобы указать, какие символы могут быть добавлены.

В приведенном выше случае вы должны контролировать диапазон символов на основе длины строки в поле.

  • Первый символ должен быть цифрой (проверьте для ascii 0на 9)
  • Второй символ может быть цифрой или \
  • Если второй символ является цифрой, добавьте для них \!

Этот шаблон повторяется для следующего блока цифр.Последний блок цифр может состоять из 2 или 4 цифр.

Редактировать : У меня есть блоки в обратном порядке от OP.Первый блок принимает только 4 цифры, за которыми следуют \ и два других блока, как описано выше.Но концепция все та же, используйте событие Key* для управления тем, что можно вводить, основываясь на том, какая строка уже находится в TextBox.

Не включайте кнопку «ОК», если строка не завершена.Это означает, что только в третьем цифровом блоке, и только в том случае, если в цифровом блоке есть 2 или 4 цифры.

Кнопка «Отмена» всегда включена, поэтому они могут сбежать в любое время.Приведенный выше подход не гарантирует действительную дату (если это именно то, что вам нужно), поэтому перед включением кнопки «ОК» требуются дополнительные проверки.

Использование вышеуказанного подхода и недопущение принятия пользователем недействительногочисло означает меньше проверки ошибок в вашем другом коде!

Конечно, вы также можете использовать DateTimePicker!

...