powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка несуществующей даты
24 сообщений из 24, страница 1 из 1
Обработка несуществующей даты
    #38056365
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В поле формы пользователь указывает дату. После нажатия "ОК" проверяю, чтобы значение было существующей датой и... чевой-то не понимаю...
Тестирую вводом текста или пустого значения, функция IsDate() исправно перехватывает, ставлю 30 февраля

xDate="30.02.12"

?IsDate(xDate)
True

Как это победить?
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056371
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ на вопрос лежит тут:
Код: vbnet
1.
2.
?cDate("30.02.12")
12.02.1930 



Используй полный год.
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056390
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056391
kiv-1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще подключить компонент, где просто нельзя ввести другую дату? Например Microsoft Calendar Control. Или на крайний объявить переменную as Date, она сразу и начнет ругаться... если вводить 30.02.2012
По типу этого:
Код: vbnet
1.
2.
3.
4.
5.
6.
Dim Date_in As Date
On Error GoTo Err1

Date_in = Text1.Text

Err1: MsgBox "Введите правильную дату!"
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056398
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще, если у программы нет графического интерфейса, например :-)
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056401
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНе проще, если у программы нет графического интерфейса, например :-)ТвердВ поле формы пользователь указывает дату
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056403
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAntonariyНе проще, если у программы нет графического интерфейса, например :-)ТвердВ поле формы пользователь указывает датуне заметил
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056462
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока владею вашим вниманием, может подскажите, как так?
Объявил две даты как Public
Передаю в эти переменные отформатированные "dd.mm.yyyy" значения.
Сравниваю 01.01.2012 > 30.09.2012 = True
Объявляю эти даты как Dim внутри процедуры - всё корректно ?!
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056470
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тверд,

Для объявления воспользуйтесь специальными литералами для дат:
Код: vbnet
1.
2.
Dim Dt As Date
Dt = #1/1/2012#
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056474
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТвердОбъявил две даты как Public
Передаю в эти переменные отформатированные "dd.mm.yyyy" значения.Какого типа переменные?
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056489
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот кусок кода. Программа пробегает значения таблицы и сравнивает их...


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'Почему то, объявленные как Public не работают Х( !?!?!
Dim xxBazDate As Date
Dim xxPayDay As Date
    
    For i = 1 To xt - 1 'Без заголовка
    xxBazDate = xCellBazDate.Text
    xDay = xCellDay.Value
    xxPayDay = DateAdd("Y", xDay, xxBazDate)
        If xxPayDay >= DateAdd("Yyyy", 1, xDate) Then 'долгосрочка да
        xCellLong.Value = xCellSumm.Value
        Else 'долгосрочка нет
        xCellLong.Value = 0
        End If
        If xDate <= xxPayDay Then 'непросрочено
        xCellNoPas.Value = xCellSumm.Value
        xCellPasBe180.Value = 0
        xCellPasAf180.Value = 0
        xCellNamDeb.Value = "не просрочено"
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056502
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
DateAdd("Y", xDay, xxBazDate)


вы в курсе, что это не день прибавляет , а год?
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056505
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056510
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

Да, здесь я ловлю "долгосрочку" - больше года
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056515
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоп, что значит год?! Год это "Yyyy".
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056520
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Но у меня и так нет ни одной переменной Variant. Считаете, эксплисит нужен?
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056525
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
datediff() используйте для сравнения дат
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056530
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тверд,

Например, зачем использовать xCellBazDate.Text вместо Value? Там другой формат? что за переменная xDate, тип дата? Выложите минимальный файл, чтобы цикл можно было прогнать. Если русская локаль установлена, проблем быть не должно
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38056563
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТвердShocker.Pro,

Но у меня и так нет ни одной переменной Variant. Считаете, эксплисит нужен?а переменная xDay какого типа? Я не вижу объявлений, поэтому рекомендую
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38058267
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вчера не успел...
Вот код, в файле форма. У меня и код и форма лежат в PERSONAL. Если запускать как есть, даты сравниваются по не понятному, для меня, принципу.
Код: vbnet
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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
Public xxt, xi, xxDay  As Integer
Public xxCell, xxCellBazDate, xxCellDay, xxCellSumm, xxCellNoPas _
, xxCellPasBe180, xxCellPasAf180, xxCellLong As Range
Public xxDate, xxPayDay, xxBazDate As Date
Public xws As Worksheet
Sub Начали()
UF1.Show
End Sub
Sub Удаление()
xxt = Sheets.Count
    If xxt = 1 Then
        Sheets.Add After:=Sheets(Sheets.Count)
    End If
Worksheets(2).Activate
Range("A1").Value = UF1.TxbDate.Value
Unload UF1
Set xws = Worksheets(2)
xws.Name = "DATE"
xws.Visible = xlSheetVeryHidden
Set xws = Nothing
xxt = Sheets.Count
    If xxt > 2 Then
        For xi = 3 To xxt
        Application.DisplayAlerts = False
        Worksheets(xi).Delete
        Next
    End If

По_принадлежности
End Sub
Sub По_принадлежности()
Set xxCell = Worksheets("DATE").Range("A1")
xxDate = Format(xxCell.Value, "dd.mm.yyyy")
Set xxCellBazDate = Range("A2")
Set xxCellDay = Range("B2")
Set xxCellSumm = Range("C2")
Set xxCellNoPas = Range("D2")
Set xxCellPasBe180 = Range("E2")
Set xxCellPasAf180 = Range("F2")
Set xxCellLong = Range("G2")
xxt = Application.WorksheetFunction.CountA(Range("A:A"))

'    Dim xxBazDate As Date
'    Dim xxPayDay As Date
    
    
    For xi = 1 To xxt - 1
    xxBazDate = xxCellBazDate.Value
    xxDay = xxCellDay.Value
    xxPayDay = DateAdd("Y", xxDay, xxBazDate)
        If xxPayDay >= DateAdd("Yyyy", 1, xxDate) Then 'долгосрочка да
        xxCellLong.Value = xxCellSumm.Value
        Else 'долгосрочка нет
        xxCellLong.Value = 0
        End If
        If xxDate <= xxPayDay Then 'не просрочено
        xxCellNoPas.Value = xxCellSumm.Value
        xxCellPasBe180.Value = 0
        xxCellPasAf180.Value = 0
        ElseIf xxDate > xxPayDay And DateDiff("Y", xxPayDay, xxDate) <= 180 Then просрочено до 180
        xxCellNoPas.Value = 0
        xxCellPasBe180.Value = xxCellSumm.Value
        xxCellPasAf180.Value = 0
        ElseIf DateDiff("Y", xxPayDay, xxDate) > 180 Then 'просрочено свыше 180
        xxCellNoPas.Value = 0
        xxCellPasBe180.Value = 0
        xxCellPasAf180.Value = xxCellSumm.Value
        End If
        Set xxCellBazDate = xxCellBazDate.Offset(1, 0)
        Set xxCellDay = xxCellDay.Offset(1, 0)
        Set xxCellSumm = xxCellSumm.Offset(1, 0)
        Set xxCellNoPas = xxCellNoPas.Offset(1, 0)
        Set xxCellPasBe180 = xxCellPasBe180.Offset(1, 0)
        Set xxCellPasAf180 = xxCellPasAf180.Offset(1, 0)
        Set xxCellLong = xxCellLong.Offset(1, 0)
     Next
Set xxCellBazDate = Nothing
Set xxCellDay = Nothing
Set xxCellSumm = Nothing
Set xxCellNoPas = Nothing
Set xxCellPasBe180 = Nothing
Set xxCellPasAf180 = Nothing
Set xxCellLong = Nothing

End Sub
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38058281
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТвердНо у меня и так нет ни одной переменной Variant. Считаете, эксплисит нужен?
а это что?
Код: vbnet
1.
Public xxDate, xxPayDay, xxBazDate As Date

здесь лишь одна переменная определена как Date, остальные как Variant
C другими объявлениями то же самое
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38058286
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
Public xxt, xi, xxDay  As Integer
Public xxCell, xxCellBazDate, xxCellDay, xxCellSumm, xxCellNoPas _
, xxCellPasBe180, xxCellPasAf180, xxCellLong As Range
Public xxDate, xxPayDay, xxBazDate As Date

Тип Integer, Range и Date имеют соответственно xxDay, xxCellLong и xxBazDate, все остальные — Variant.
Вот как правильно:
Код: vbnet
1.
Public xxt As Integer, xi As Integer, xxDay As Integer
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38058301
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тверд,

Приложенный файл без формы, и без листа DATE... Тестировать ну не совсем хорошо. Поставьте у себя перед вызовом процедуры основной брейкпоинт. После (незнаю как вы вызываете макрос) перейдёте в отладчик, далее построчно смотрите как код выполняется и наводите курсор мыши на переменные в коде... В подсказке будет показано текущее значение. И смотрите где дата, преобразовалсь не в тот "формат".
...
Рейтинг: 0 / 0
Обработка несуществующей даты
    #38058315
Тверд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLADТверд,

Приложенный файл без формы, и без листа DATE... Тестировать ну не совсем хорошо. Поставьте у себя перед вызовом процедуры основной брейкпоинт. После (незнаю как вы вызываете макрос) перейдёте в отладчик, далее построчно смотрите как код выполняется и наводите курсор мыши на переменные в коде... В подсказке будет показано текущее значение. И смотрите где дата, преобразовалсь не в тот "формат".

Лист DATE создаётся макросом, форму, да при сохранении как .xlsx я её тупо потерял, сори.
Замечание товарищей выше принял, учёл. Спасибо.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Обработка несуществующей даты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]