Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/63: Рейтинг темы: голосов - 63, средняя оценка - 4.78
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279

Проверка корректности ввода даты InputBox

15.11.2019, 11:57. Показов 12333. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Есть вопрос.
Я прошу пользователей вводить дату через inputBox. В сообщении конечно прошу вводить дату в формате дд.мм.гггг. Но кто у нас когда смотрит, что нужно и каком виде нужно вводить
как бы мне проверить что человек ввел дату и в нужном мне формате?
пробовал через IsDate и TypeName делать, но там формат не проверяет. В итоге у меня получилось такое вот чудо в работоспособности которого я вообще не уверен. Здесь же попытался защититься от того, что кто-то вообще ничего не введет или закроет окно InputBox.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub potrebnost()
On Error GoTo 2
Dim b As Date, c as Date, x as Date
a = MsgBox("Сформировать запрос на текущую дату?", 4 + 32)
If a = 6 Then
x = Date
Else
b = InputBox("Введите дату в формате дд.мм.гггг")
If StrPtr(b) = 0 Then Exit Sub
1:
If IsDate(b) And TypeName(b) = "Date" Then
 b = FormatDateTime(b, vbShortDate)
 c = FormatDateTime(Date, vbShortDate)
 If c < b Then
 MsgBox "Ok"
 Else
 GoTo 2
 End If
Else
2:
b = InputBox("Введите дату корректно")
If StrPtr(b) = 0 Then Exit Sub
GoTo 1
End If
End If
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2019, 11:57
Ответы с готовыми решениями:

Проверка корректности ввода даты.
Составить программу, которая запрашивает дату (число, месяц, год) и проверяет корректность введенных пользователем данных помогите...

Проверка корректности ввода даты
Необходима помощь, нужно написать проверку на корректный ввод даты в формате ДД.ММ.ГГГГ, и есть ли возможность ее написать, если дата...

Проверка корректности ввода даты в Edit
Как сделать чтобы при не правильном вводе даты выходило об этом сообщение?

11
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
15.11.2019, 12:09
Лучший ответ Сообщение было отмечено teplovdl как решение

Решение

teplovdl, привет! попробуй так

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MyFirstDateCode()
    Dim vData  As String
    vData = InputBox("Введите дату по образцу: дд.мм.гг")
    If vData = "" Then Exit Sub
    If IsDate(vData) = True And vData Like "##.##.##" = True Then
        MsgBox vData
    Else
        MsgBox "Повторите ввод"
    End If
End Sub
Надстройка: Macro Tools VBA – инструменты разработки макросов VBATools
1
13 / 13 / 0
Регистрация: 24.10.2015
Сообщений: 279
15.11.2019, 12:24  [ТС]
Спасибо. Работает. Видимо не нужно все сильно усложнять
0
209 / 184 / 43
Регистрация: 02.08.2019
Сообщений: 586
Записей в блоге: 23
15.11.2019, 12:26
Лучший ответ Сообщение было отмечено teplovdl как решение

Решение

teplovdl, это главный принцип программирования))) чем проще тем надежнее)!
0
3 / 3 / 0
Регистрация: 07.04.2023
Сообщений: 180
14.05.2023, 09:42
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MyFirstDateCode()
    Dim vData  As String
    vData = InputBox("Введите дату по образцу: дд.мм.гг")
    If vData = "" Then Exit Sub
    If IsDate(vData) = True And vData Like "##.##.##" = True Then
        MsgBox vData
    Else
        MsgBox "Повторите ввод"
    End If
End Sub
Добрый день. Подскажите как поправить код: если дата введена неверно выводилось сообщение "повторите ввод" и вновь выходило сообщение о вводе даты и так до тех пор пока дата не будет введена верно, чтобы дальше пошло продолжение кода. Либо если пользователь все же передумал, то выход и закрытие книги без сохранения.
0
428 / 333 / 61
Регистрация: 29.06.2019
Сообщений: 493
14.05.2023, 10:14
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub MyFirstDateCode()
    Dim vData  As String
1   vData = InputBox("Введите дату по образцу: дд.мм.гг")
    If vData = "" Then Exit Sub
    If IsDate(vData) = True And vData Like "##.##.##" = True Then
        MsgBox vData
    Else
        MsgBox "Повторите ввод":goto 1
    End If
End Sub
2
3 / 3 / 0
Регистрация: 07.04.2023
Сообщений: 180
14.05.2023, 10:24
SergioJek Спасибо! Работает!
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4159 / 2448 / 508
Регистрация: 13.12.2016
Сообщений: 8,319
Записей в блоге: 5
14.05.2023, 11:11
Цитата Сообщение от teplovdl Посмотреть сообщение
Я прошу пользователей вводить дату через inputBox.
Может сменить подход? Пусть вводят как им (пользователям) угодно.
А после ввода проверить является ли то, что они ввели датой, привести ее к вашему формату и спросить у пользователя эту ли дату они имели ввиду.

Добавлено через 3 минуты
- теме 4 года... невнимателен. Да и SergioJek в принципе это-же и сделал.
0
 Аватар для Angry Old Man
3005 / 745 / 313
Регистрация: 26.03.2022
Сообщений: 1,394
Записей в блоге: 1
14.05.2023, 17:38
Цитата Сообщение от АЕ Посмотреть сообщение
Может сменить подход? Пусть вводят как им (пользователям) угодно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Katin()
    Dim DD As Date
    If Not LogPutDate(DD) Then
        MsgBox "Дата не введена", 16
        Exit Sub
    End If
    MsgBox DD, 64
End Sub
 
Function LogPutDate(InDate As Date) As Boolean
    Dim Dstring As String, Msg As String
    LogPutDate = False: Msg = Empty
    Do
        Dstring = InputBox(Msg + "Введите дату:")
        If Len(Dstring) = 0 Then Exit Function
        LogPutDate = IsDate(Dstring) And Not IsNumeric(Dstring)
        If LogPutDate Then
            InDate = Dstring
            Exit Function
        End If
        Msg = Dstring + " не воспринимается как дата" + vbCr
    Loop
End Function
То ли очень плохо, то ли очень хорошо, при вводе, например 12/12 или 12-12 или 12.12 на выходе будет подставлен текущий год 12.12.2023
а если вместо четырёхзначного года вводить 0-29, год конвертируется в 2000-2029
Описанный баг это не ошибка, а фича
Хотя логично, наверное, контролировать диапазон разрешенных дат
1
3 / 3 / 0
Регистрация: 07.04.2023
Сообщений: 180
14.05.2023, 17:52
Angry Old Man Спасибо за помощь!
0
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4159 / 2448 / 508
Регистрация: 13.12.2016
Сообщений: 8,319
Записей в блоге: 5
14.05.2023, 20:34
Цитата Сообщение от Angry Old Man Посмотреть сообщение
Описанный баг это не ошибка, а фича
Цитата Сообщение от АЕ Посмотреть сообщение
спросить у пользователя эту ли дату они имели ввиду.
Увы да. Поэтому я и предложил переспрашивать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38178 / 21113 / 4307
Регистрация: 12.02.2012
Сообщений: 34,716
Записей в блоге: 14
15.05.2023, 11:23
Цитата Сообщение от АЕ Посмотреть сообщение
Может сменить подход?
- конечно! Вообще не вводить дату вручную, а использовать календарь !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2023, 11:23
Помогаю со студенческими работами здесь

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

Проверка корректности ввода даты и email-адреса
Помогите пожалуйста с модулем проверки ввода в текстбокс с клавиатуры. Может кто-то делал подобное. Есть два текстбокса, в один нужно...

Проверка корректности даты
Заданы 2 числа DD и ММ. Проверьте, может ли число ММ быть номером месяца, а число DD - номером дня. Проверять нужно сразу 5 дат.

Проверка корректности даты
Необходимо проверить является ли заданная дата (число, месяц, год) корректным числом с учётом високосных годов и количества дней в месяце?

Проверка корректности даты
Есть ли какой-то простой способ проверить существует ли данный день в данном месяце данного года?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru