Кнопка отмены ввода InputBox - PullRequest
0 голосов
/ 20 мая 2019

У меня довольно глупый, более или менее, вопрос, который мне не удается решить с помощью InputBox и кнопки «Отмена», которая является его частью.

Это код:

Sub ExportFromOutlook()
Dim dteStart As Date
Dim dteEnd As Date

dteStart = InputBox("What is the start date?", "Export Outlook Calendar")
dteEnd = InputBox("What is the end date?", "Export Outlook Calendar")
Call GetCalData(dteStart, dteEnd)
End Sub

Идея состоит в том, что после ввода даты начала и окончания я выполняю код экспорта из Outlook, но это не главное.

То, чего я хочу достичь, - это когдаЯ нажимаю «Кнопка отмены» на любом из входных окон, чтобы выйти из сабвуфера, чтобы не получить ошибку в коде VBA для его отладки.

Заранее спасибо!

1 Ответ

4 голосов
/ 20 мая 2019

Неквалифицированный InputBox равен VBA.InputBox. Он возвращает String, а не дату, и вы используете StrPtr, чтобы определить, была ли нажата кнопка Отмена:

Dim dteStart As Date
Dim dteEnd As Date
Dim t as string

t = InputBox("What is the start date?", "Export Outlook Calendar")
If StrPtr(t) = 0
  Exit Sub
Else
  dteStart = CDate(t)
End If

t = InputBox("What is the end date?", "Export Outlook Calendar")
If StrPtr(t) = 0
  Exit Sub
Else
  dteEnd = CDate(t)
End If

Если вы переключитесь на Excel Application.InputBox, который возвращает Variant, он может стать немного более простым:

Dim dteStart As Date
Dim dteEnd As Date
Dim t as Variant

t = Application.InputBox("What is the start date?", "Export Outlook Calendar", Type:=2)
If t = False
  Exit Sub
Else
  dteStart = CDate(t)
End If

t = Application.InputBox("What is the end date?", "Export Outlook Calendar", Type:=2)
If t = False
  Exit Sub
Else
  dteEnd = CDate(t)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...