2012-05-30 2 views
0

Я пытаюсь использовать функцию DateDiff для макроса в excel с использованием VBA.Функция DateDiff неожиданно возвращает другую дату или значение по умолчанию

Насколько я понимаю, код должен возвращать целочисленное значение.

Вот примеры, приведенные по этому адресу: http://www.techonthenet.com/access/functions/date/datediff.php

-DateDiff ("гггг", № 15/10/1998 года №, № 22/11/2003 года N) будет возвращать 5

- DateDiff ("m", # 15/10/2003 #, # 22/11/2003 #) будет возвращаться 1

-DateDiff ("d", # 15/10/2003 #, # 22/11/2003 #) вернет 38

Вот код, который я использовал:

Sub macrotest() 

Dim dateNow, dateThen, dateFinal As Date 

dateNow = Format(Sheet1.Cells(2, 2), "DD/MM/YY") 
dateThen = Format(Sheet1.Cells(3, 2), "DD/MM/YY") 
dateFinal = DateDiff("d", dateNow, dateThen) 

Sheet1.Cells(5, 2) = dateFinal 


End Sub 

Наконец, это то, что я имел в моих первенствовать строк:

B2: 5/30/12

B3: 3/30/12

B5: 12:00:00 AM (эта ячейка должна была иметь указанный результат).

-У меня есть либо даты, которые были отменены по умолчанию, либо 12:00.

Любые идеи? Благодаря!

+0

Ваши данные в файле excel являются актуальными датами или просто текстовыми строками? –

+0

Проверьте, какая ячейка формата B5 установлена ​​на данный момент. Установлен ли он в числовом формате? – mellamokb

+0

Нет, они отформатированы как даты в excel –

ответ

2

В соответствии с системой помощи DateDiff возвращает Long.

Ваш код объявляет два варианта и один тип даты. Вместо

Dim dateNow, dateThen, dateFinal As Date

вы, вероятно, имел в виду

Dim dateNow As Date, dateThen As Date, dateFinal As Long

Этот код работает для меня. Возможно, вам придется настроить его немного, чтобы применить его к вашей конкретной ситуации (я использовал ActiveSheet, чтобы сделать тестирование быстрее)

Sub macrotest() 

Dim dateNow As Date, dateThen As Date, dateFinal As Long 

dateNow = ActiveSheet.Cells(2, 2).value 
dateThen = ActiveSheet.Cells(3, 2).value 
dateFinal = DateDiff("d", dateThen, dateNow) 

ActiveSheet.Cells(5, 2) = dateFinal 

End Sub 

Кроме того, я считаю, у вас есть dateNow и dateThen вспять в вызове функции DateDiff.

+0

+1 Именно мои мысли, которые я почти наполовину печатал, но отбрасывали LOL –

+0

, которые сработали! Кроме того, вы были правы в отношении замены переменных даты. Большое спасибо! –

Смежные вопросы