Проверка данных InputBox и конец цикла - PullRequest
0 голосов
/ 03 марта 2020

У меня есть код для ввода даты через InputBox (см. Ниже). Проблема в том, что Else не работает (ie. Если пользователь вводит что-то, кроме формата mm / dd / yy, он не останавливается). Как сделать так, чтобы пользователь вводил его в представленном формате?

Кроме того, я хочу завершить l oop на endDate. Прямо сейчас, если вы введете 01/10/20 в качестве даты начала и 31.12.20 в качестве даты окончания, она остановится на 1 января 2021 года. Как мне сделать это на 31 декабря 2020 года?

  Dim startDate As Date
  Dim endDate As Date

  startDate = InputBox("Enter project start date in format mm/dd/yy", "User date", Format(Now(), "dd/mm/yy"))
  endDate = InputBox("Enter project end date in format mm/dd/yy", "User date", Format(Now(), "dd/mm/yy"))

  If IsDate(startDate) Then
    startDate = Format(CDate(startDate), "mmm d, yyyy")
  Else
    MsgBox "Wrong date format"
  End If

  If IsDate(endDate) Then
    endDate = Format(CDate(endDate), "mmm d, yyyy")
  Else
    MsgBox "Wrong date format"
  End If

Range("A2").Value = startDate

Dim i As Long
Dim j As Long
Dim x As Integer

i = startDate
j = endDate
x = 3

Do Until i >= j
    Cells(x, 1).Value = i + 7
    i = i + 7
    x = x + 1
Loop

End Sub```

1 Ответ

0 голосов
/ 04 марта 2020

Если дата неправильная, отображается окно сообщения, но ничто не мешает ей продолжить выполнение кода после закрытия окна сообщения. Есть несколько способов исправить это.

Во-первых, просто добавьте строку

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...