2013-08-07 57 views
0

我有一個excel沒有正確識別年份的問題。excel vba中的年份n + 1 <年n

這裏是我的代碼

' Sort value 
max = Sheets("booking").Cells(Rows.count, "A").End(xlUp).Row 
Range("A1:H" & max).Select 
ActiveWorkbook.Worksheets("Booking").Sort.SortFields.Clear 
ActiveWorkbook.Worksheets("Booking").Sort.SortFields.Add Key:=Range("D2:D" & max) _ 
, SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
ActiveWorkbook.Worksheets("Booking").Sort.SortFields.Add Key:=Range("A2:A" & max) _ 
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
With ActiveWorkbook.Worksheets("Booking").Sort 
    .SetRange Range("A1:H" & max) 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

' mark past booking in italic and in red if not validated 
For L = 2 To max 
    If Format(CDate(booking.Cells(L, 5).Value), "dd-mm-yy") < Format(CDate(cells(1,10).value), "dd-mm-yy") Then 
     booking.Cells(L, 5).EntireRow.Font.Italic = True 
      If booking.Cells(L, 5).Offset(0, 3).Value = "" Then 
       booking.Cells(L, 5).EntireRow.Font.Color = vbRed 
      Else 
       booking.Cells(L, 5).EntireRow.Font.Color = vbBlack 
      End If 
    End If 
Next L 

列d是完整的日期格式化的dd-mm-yy
細胞(1,10) = now()

當代碼需要在訂單按日期排序:NP,它把2014年訂單在2013年訂單前

但是

當鱈魚e現在應用<日期的斜體格式,2014年的訂單被認爲是過去的,並且代碼將它們以斜體表示

我在做什麼錯了?

+0

您不應該使用「格式」來比較日期。你只是不需要,它可能會讓所有的東西都變得麻木。 – JMax

回答

0

很顯然,在For循環中,您將日期作爲字符串進行比較,所以我不驚訝您會得到不同的結果。你應該改變

If Format(CDate(booking.Cells(L, 5).Value), "dd-mm-yy") < Format(CDate(cells(1,10).value), "dd-mm-yy") Then 

If booking.Cells(L, 5).Value < booking.Cells(1,10) Then 

上不相關的音符,什麼是可變cells在你If聲明的第二部分的價值?你忘了在booking.之前忘記了嗎?

+0

Thx對你的幫助,但實際上......好吧,我幾乎慚愧地承認它,但我的錯誤來自刪除我用於測試的行,而沒有認爲格式(斜體和顏色)ofc沒有復位! !現在,我把所有的線路正常格式,MIRACLE它的工作 - .-!無論如何,你的幫助! – Kespell