Как конвертировать "12/08/16" в формат даты и сравнить в VBA?

У меня есть следующий код, который работал отлично раньше, но сейчас он не работает.

Ниже приведен код, который преобразует строковую дату в дату и сравнивает ее с сегодняшней датой. Код:

Dim fileDate1 As Date
fileDate1 = CDate("12/08/16")   'dd/mm/yy'
If Format(fileDate1, "yyyymmdd") < Format(Date, "yyyymmdd") Then
    //delete file because date changed
    KillFileOnMac XMLFilePath
End If

Кто-нибудь может подсказать, что мне здесь не хватает?

2 ответа

Решение

Нанджи, комментарий ко второй строке сомнителен, в моей системе эта строка устанавливает fileDate1 еще в 2012 году, 16 августа. Вместо этого было бы гораздо безопаснее использовать:

fileDate1 = DateSerial(2016, 8, 12)

(для ясности вы могли бы также рассмотреть возможность избавления от призывов к "форматированию", просто сравните даты напрямую: If fileDate1 < Date Then...)

Похоже, вы ожидали, что cDate("12/08/16") будет равен 12 августа 2016 года. Дата фактически 8 декабря 2016 года.

Мы можем сказать по:

Dim fileDate1 As Date
fileDate1 = CDate("12/06/16")
MsgBox Format(fileDate1, "yyyymmdd")

Это показывает 20161206.

Итак, похоже, что ваш ввод строки даты является проблемой. Как только Мэтс Линд предложит это сделать, вам не нужно форматировать даты для их сравнения. Вот как бы я справился с этим:

Dim fileDate1 As Date
fileDate1 = CDate("12/08/16")

If fileDate1 < DateValue(Now) Then

    MsgBox "I shall kill the file because the date changed"
    KillFileOnMac XMLFilePath
Else
    MsgBox "The file date is today or newer "

End If

Я использую dateValue(сейчас), потому что он работает кроссплатформенный. Я уклоняюсь от MacScript, потому что не ожидаю, что он будет поддерживаться вечно. Надеюсь это поможет.

Другие вопросы по тегам