2016-06-15 4 views
0
.

Ниже приводится значение Sub для подсчета лет между двумя датами. В ячейке не отображается значение (i, 3), и когда я обновляюсь до MsgBox, отображается значение времени. Заранее спасибо за помощь.Какова моя ошибка в датированном макросе? Возвращаемое значение находится в формате времени.

Sub EE_DatedIF() 
    Dim wb1 As Workbook 
    Dim i As Long 
    Dim LastRow1 As Long 
    Dim yrDiff As Long 
    Dim d1 As Date 
    Dim d2 As Date 

    Set wb1 = Workbooks("macro all client v.01.xlsm") 

    LastRow1 = wb1.Sheets("Carrier").range("E:E").Find("", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

    For i = 10 To LastRow1 
     d1 = wb1.Sheets("Settings").Cells(i, 1) 
     d2 = wb1.Sheets("Carrier").Cells(i, 24) 
     yrDiff = DateDiff("yy", d1, d2) 
     wb1.Sheets("Settings").Cells(i, 3) = yrDiff 
    Next i 
End Sub 
+0

Вы получаете правильный результат с помощью 'yrDiff = DateDiff (" yyyy ", d1, d2)'? Вы работаете под заголовком 'On Error Resume Next'? 'yrDiff' является длинным и может воспроизводить только время. – Jeeped

ответ

1

Среди других проблем ваша попытка восстановить последнюю заполненную строку в столбце E не должна считаться надежной. Лучше с чем-то ближе к этому.

With wb1.Sheets("Carrier").Range("E:E") 
    lastRow1 = .Find("*", after:=.Cells(1), SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
End With 
+0

Я обновил ссылку на ячейку (i, 1) до (1,1) и удалил *. Теперь он работает так, как ожидалось. Еще раз спасибо. –