2017-02-20 8 views
2

У меня есть файл excel, который автоматически помещает записи по мере их добавления. Мне нужен сценарий, который находит разницу во времени в минутах между первой и последней записью. Это то, к чему я придумал.VBA: DateDiff не работает

Sub Duration() 

Dim lRow As Long Dim lValue Dim fValue Dim Duration As Long, n As Integer 

'Find the last non-blank cell in column A(1) 
lRow = Cells(Rows.Count, 1).End(xlUp).Row 
lValue = Cells(lRow, 5).Value 
MsgBox (lValue) 
fValue = Cells(5, 5).Value 
MsgBox (fValue) 
Duration = DateDiff("n", "fValue", "lValue") 
MsgBox (Duration) 

Cells(3, 5) = Duration 

End Sub 
+8

Попробуйте следующее: 'Duration = DateDiff (" n ", fValue, lValue)' – Vityata

+2

@Vityata верна, вы используете строковые литералы, где должны быть имена переменных. Он пытается найти разницу дат из двух несоответствующих строк символов. Предполагая, что ячейки имеют даты, это должно сработать после этого. –

+2

Спасибо. Это исправило это! Я знаю, что это любительская ошибка, но новая для программирования. Я ценю помощь. –

ответ

5

DateDiff принимает 3 аргумента:

DATEDIFF (datepart , startdate , enddate) 

Все аргументы могут быть заданы как переменные, а также. В вашем случае, попробуйте:

Duration = DateDiff("n", fValue, lValue) 

Если вы хотите сделать это с меньшим количеством строк, вы можете даже пойти на:

Duration = DateDiff("n", Cells(5, 5).Value, Cells(lRow, 5).Value) 

Для получения дополнительной информации см https://msdn.microsoft.com/en-us/library/ms189794.aspx.

+1

Спасибо! Это отлично работает. –

+0

Добро пожаловать, @LeeSin - это не аномальная ошибка, есть набор ошибок, которые каждый должен сделать хотя бы один раз, чтобы стать лучше :) – Vityata

+0

Я пытаюсь подписаться на то, что сказал Граучо: «Учитесь на ошибках других. Вы никогда не сможете прожить достаточно долго, чтобы сделать их всех самостоятельно ». –