2016-08-12 11 views
1

У меня есть следующий код, который отлично работал, но теперь он не работает.Как конвертировать "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

Где происходит ошибка? Разве вы не имеете в виду сейчас с датой? – Wernerson

+0

@Wernerson Я имею в виду, что он работал в моей старой системе. Теперь я меняю систему. Я не знаю, связано ли это или ОС. Но выше код не работает. Переменная 'fileDate1' пуста. –

+0

Как Верннер спрашивает, где происходит ошибка? – DragonSamu

ответ

4

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

fileDate1 = DateSerial(2016, 8, 12) 

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

+0

Спасибо. Я обработал это в MacScript. Теперь MacScript обрабатывает сравнение дат. Я также могу использовать ваше решение, но для этого я должен заполнить некоторый параметр. Я думаю, что альтернативный способ использования MacScript выглядит лучше, потому что он обрабатывает весь формат даты. –

1

Похоже, вы ожидали, что 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, потому что я не ожидаю, что он будет поддерживаться навсегда. Надеюсь, это поможет.