Если дата неправильная, отображается окно сообщения, но ничто не мешает ей продолжить выполнение кода после закрытия окна сообщения. Есть несколько способов исправить это.
Во-первых, просто добавьте строку
Exit Sub
после отображения msgbox.
Однако я предполагаю, что вы не хотите, чтобы программа просто отказывалась после неправильного ввода. Вместо этого вы, скорее всего, захотите сообщить пользователю, что он был неверен, и попросить ввести еще один вход, пока они не предоставят правильный формат.
Обычно я делаю это с помощью До, пока l oop. Попробуйте это:
startDate = InputBox("Enter project start date in format mm/dd/yy", "User date",
Format(Now(), "dd/mm/yy"))
Do Until IsDate(startDate)
MsgBox "Wrong date format."
startDate = InputBox("Enter project start date in format mm/dd/yy", "User date",
Loop
endDate = InputBox("Enter project end date in format mm/dd/yy", "User date",
Format(Now(), "dd/mm/yy"))
Do Until IsDate(endDate)
MsgBox "Wrong date format."
startDate = InputBox("Enter project start date in format mm/dd/yy", "User date",
Loop
Вторая проблема заключается в том, что вы проверяете значение i до и добавляете к нему 7. Кроме того, endDate печатается, только если он кратен 7 от startDate. Если вы всегда хотите, чтобы конечная дата печаталась, вам придется внести некоторые изменения.
Попробуйте вместо этого:
i = startDate + 7
j = endDate
x = 3
Do Until i > j
Cells(x, 1).Value = i
i = i + 7
x = x + 1
Loop
Cells(x, 1).Value = endDate