Преподаватель дал задачу по условиям, но сказал что надо будет самой искать способ решения. Вот:
Код
'Дана дата из трех чисел (день, месяц и год). Вывести
'yes, если такая дата существует (например, 12 02 1999 - yes, 22 13 2001 - no).
'Считать, что в феврале всегда 28 дней
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub homework029()
Dim a As Integer, b As Integer, c As Integer
a = InputBox("Number 1")
Cells(1, 1) = a
b = InputBox("Number 2")
Cells(1, 2) = b
c = InputBox("Number 3")
Cells(1, 3) = c
....
End Sub
Мои попытки:
Далее с ними надо отработать по условиям:
Код
Dim d As Integer, m As Integer, y As Integer 'здесь пытаюсь задать числам что есть день, месяц, год
if a >=1 and a<=21 then a=dend ifif b>=1 and <=12 thenb = mend ifif c>=1 thenc = y ' годы могут быть бесконечныend if'теперь как-то надо для февраля задать условие, что он не может быть больше 28if m =2 then d >=1 and <=28 'вот здесь я сомневаюсьend if'......
Georgetta Monson написал: 'Считать, что в феврале всегда 28 дней
а это с какого перепугу? если есть год, то понятно сколько дней в этом году было в феврале
Цитата
Georgetta Monson написал: Сейчас изучаем условия If, Else, Elseif, End If.
судя по этому решение нужно в VBA но фраза
Цитата
Georgetta Monson написал: Дана дата из трех чисел (день, месяц и год)
абсолютно не обьясняет где они даны? 1. лежат в ячейках? (каких) 2. нужно запросить у пользователя? 3. прочитать из файла? (какого) 4. взять с интернета? (адрес страницы, где они лежат) этот перечень можно продолжать долго. продолжать? или вы сами обьясните "даны" - это как и где???
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Именно ДАНЫ три числа, т.е. работать нужно с тремя данными.
Код
Sub homework029()
Dim a As Integer, b As Integer, c As Integer
a = InputBox("Number 1")
Cells(1, 1) = a
b = InputBox("Number 2")
Cells(1, 2) = b
c = InputBox("Number 3")
Cells(1, 3) = c
'......
End Sub
Вот моя попытка:
Код
Sub homework029()
Dim a As Integer, b As Integer, c As Integer
Dim d As Integer, m As Integer, y As Integer
a = InputBox("Number 1")
Cells(1, 1) = a
b = InputBox("Number 2")
Cells(1, 2) = b
c = InputBox("Number 3")
Cells(1, 3) = c
if a>=1 and a<=31 then
a=d
end if
if b>=1 and b<=12 then
a=m
end if
if c>=1 then 'годы могут быть бесконечны
a=y
end if
'надо задать условие для февраля, что не более 28 дней
if m=2 then
' здесь у меня затык....
End Sub
Function IsLegalDate(d, m, y) As Boolean
IsLegalDate = Len("" & y) > 1 And d & "." & m & "." & y = _
Format(DateSerial(y, m, d), "D.M." & String(Len("" & y), "Y"))
End Function
правда она не имеет никакого отношения к изучаемым вами if, elseif, else ... в вашем случае после того, как получили от пользователя а, в, с Msgbox IsLegalDate(a,b,c) напишет вам прошли проверку а, в, с или нет или так:
Код
Sub test()
MsgBox IsLegalDate(29, 2, 2000)
MsgBox IsLegalDate(29, 2, 2001)
End Sub
получите Истина а потом Ложь, т.е. 29 февраля в 2000 году было, а в 2001 - нет(((
Georgetta Monson написал: Сейчас изучаем условия If, Else, Elseif, End If.
То есть, если кто еще смотреть будет - этот код только под заданное условие задачи. В общем случае он неверен!!!
Код
Sub homework029()
Dim a As Integer, b As Integer, c As Integer
a = InputBox("Введите день")
'здесь должна быть проверка на то, что ввели именно число
If a < 1 Or a > 31 Then
MsgBox "No"
Exit Sub
End If
b = InputBox("Введите месяц")
'здесь должна быть проверка на то, что ввели именно число
If b < 1 Or b > 12 Then
MsgBox "No"
Exit Sub
End If
c = InputBox("Введите год")
'здесь должна быть проверка на то, что ввели именно число
If с < 1 Or с > 9999 Then ' вообще-то, если строго подойти, то не с<1, а с<-1900, но сделаем вид, что не знаем про это )))
MsgBox "No"
Exit Sub
End If
If b = 2 Then
If a > 28 Then
MsgBox "No"
Exit Sub
End If
ElseIf b = 4 Or b = 6 Or b = 9 Or b = 11 Then
If a > 30 Then
MsgBox "No"
Exit Sub
End If
End If
MsgBox "Yes"
End Sub
OFF Georgetta Monson, если вы мужчина, то зачем вам модельная женская фотография и псевдоним? Так охотнее помогают?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Добрый день всем! Чтобы не путать конкретное учебное задание с корректностью дат, напомню, что DateSerial допускает и месяц = 13, но по заданию это недопустимо (см. #1). Вариант кода по заданию на If-ElseIf-Else-End If:
Код
Sub homework029()
Dim a As Integer, b As Integer, c As Integer
Dim d As Integer, m As Integer, y As Integer
' Число
a = InputBox("Введите число", "Число 1 ... 31")
' Записать в ячейку A1
Cells(1, 1) = a
' Проверить корректность ввода
If a >= 1 And a <= 31 Then
' Правильный ввод
d = a
Else
' Сообщить об ошибке ввода
MsgBox "Неправильный ввод: " & a, vbCritical, "No"
' Завершить выполнение кода
Exit Sub
End If
' Месяц
b = InputBox("Введите номер месяца", "Месяц 1 ... 12")
' Записать в ячейку B1
Cells(1, 2) = b
' Проверить корректность ввода
If b = 2 Then
If a <= 28 Then
' Число и месяц февраля правильные
m = b
Else
' Сообщить об ошибке ввода
MsgBox "В феврале 28 дней: " & a & "." & b, vbCritical, "No"
' Завершить выполнение кода
Exit Sub
End If
ElseIf b >= 1 And b <= 12 Then
' Правильный ввод
m = b
Else
' Сообщить об ошибке ввода
MsgBox "Неправильный ввод: " & a & "." & b, vbCritical, "No"
' Завершить выполнение кода
Exit Sub
End If
' Год
c = InputBox("Введите год", "Год 1900 ... 9999")
' Записать в ячейку C1
Cells(1, 3) = c
' Проверить корректность ввода
If c >= 1900 And c <= 9999 Then
' Правильный ввод
y = c
Else
' Сообщить об ошибке ввода
MsgBox "Неправильный ввод: " & c, vbCritical, "No"
' Завершить выполнение кода
Exit Sub
End If
' Отобразить результат
MsgBox d & "." & m & "." & y, ,"Yes"
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Может, по делу всё-таки? Вот код от ZVI мне по душе. Попробую. Правда, не знаю, что такое vbCritical, не изучали. Похоже, на уведомление пользователя окошком.
МатросНаЗебре, симпатишный "бинарник" (я думал, это про эффективный поиск)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Ну, исходя из Вашей логики, в бан всех, у кого не своё фото. (((
Опять не в тему. Очень жаль, что МОЯ ПЕРСОНА стала стержнем обсуждения темы, а не сама тема. Просьба к модераторам: можно удалить все сообщения, не относящиеся к теме?
Georgetta Monson: в бан всех, у кого не своё фото…МОЯ ПЕРСОНА стала стержнем обсуждения темы
ваша персона не тянет на обсуждение (во всяком случае, не здесь) — меня раздражает ложь. И да - я, представьте себе, не кот, а человек и только больной человек может подумать иначе. А у вас - намеренное введение в заблуждение (вероятно, чтобы получить помощь за красивые "бинарные" глазки).
Не нужно выпячивать свою "оригинальность" — у нас в стране за это можно получить нечто серьёзнее бана.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
ZVI, Ваш код сразу выдаёт ошибку при неправильном вводе любого из трёх чисел (например, даты 32). В условии задачи при неправильном любого одного из чисел вывести "No". Т.е. пользователь может ввести 55 93 -0258. Т.е., это должно произойти в конце обработки всех трёх чисел.