CDate () выдает исключение после проверки IsDate () - PullRequest
0 голосов
/ 05 мая 2019

Мой код - с этого сайта - вылетает, если он не получает IsDate формат. Мне нужен цикл, чтобы постоянно запрашивать IsDate запись.

Можно ли поместить приведенное ниже в цикл до?

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not IsDate(TextBox1.Text) Then
        MsgBox "Date required"
        Cancel = True
    End If
    'Display value in another textbox for testing purposes
    TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")
End Sub

Неопытный с синтаксисом цикла.

Продолжает цикл до ввода IsDate.

1 Ответ

0 голосов
/ 05 мая 2019

Мне нужен цикл, чтобы постоянно запрашивать IsDate запись.

Поскольку вы используете событие TextBox1_Exit, вам на самом деле не нужен цикл для того, чтобы он постоянно просил пользователя ввести правильную дату, когда это не так. Это действительно будет происходить всякий раз, когда пользователь пытается покинуть TextBox1.

Проблема с вашим кодом заключается в том, что даже если вы установите Cancel = True, вы все равно достигнете строки, которая устанавливает TextBox2.Text, потому что Cancel = True не выходит автоматически из Sub. Вам нужно либо выйти из Sub сразу после Cancel = True, либо поместить следующую строку в ветку Else.

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

If Not IsDate(TextBox1.Text) Then
    MsgBox "Date required"
    Cancel = True
    Exit Sub
End If
'Display value in another textbox for testing purposes
TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")

Или это:

If Not IsDate(TextBox1.Text) Then
    MsgBox "Date required"
    Cancel = True
Else
    'Display value in another textbox for testing purposes
    TextBox2.Text = Format(CDate(TextBox1.Text), "dd/mm/yyyy")
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...