2017-07-03 94 views
2

我試圖比較兩個日期(不同列)中的年份和當前日期。如果年份相同,則應在第13欄的相應行上寫上「ATUAL」一詞,如果年份不同,則不應寫任何內容。excel:vba類型不匹配比較日期

這是我到目前爲止嘗試過的。

Sub CopyColumn2() 

Dim i As Long 
Dim j As Long 
Dim lastrow As Long 
Dim ws1 As Worksheet 
Dim ws2 As Worksheet 
Dim wbk As Workbook 
Dim wb As Worksheet 

Set wbk = Workbooks.Open("I:\CGP\DEOPEX\01 - Supervisão\01 - Administrativo\06- ADM - Taís e Natalia\Férias - Aprovadas\FÉRIAS TÉCNICOS EXTERNAS.xlsx") 
Set ws1 = ThisWorkbook.Sheets("BASE_TOTAL") 
Set ws2 = wbk.Worksheets("FUNCIONÁRIOS") 

lastrow = ws2.Range("A" & Rows.Count).End(xlUp).Row 


For j = 2 To lastrow 
    If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then 
     ws1.Cells(j, 13) = "ATUAL" 
    Else 
     ws1.Cells(j, 13) = "" 
    End If 
Next j 

End Sub 

的日期被放置在列我和L以及所有列設置爲日期。我的Excel使用葡萄牙語,所以我的日期格式是dd/mm/yyyy。

當我運行我的代碼,我收到此消息:

運行時錯誤13:類型不匹配

而這部分被高亮顯示:

If Year(ws1.Cells(j, 9)) = Year(Date) Or Year(ws1.Cells(j, 12)) = Year(Date) Then 

是誰知道這裏有什麼問題?它應該工作,因爲我所有的日期格式都是一樣的。

+3

您是否檢查哪一行會引發錯誤? –

+0

1)逐行掃描您的代碼,並避開錯誤。 2)雖然你的日期都是相同的格式,他們格式化爲文本或Excel日期?讓他們以相同的方式進行格式化,但所有文本都不會幫助您使用公式。重要的是要有正確的格式的日期,或者你需要先步驟將其轉換爲您需要的格式。 –

+0

@EganWolf是的,我編輯了這個問題。 – paulinhax

回答

1

試試這個:在您的If聲明

  1. 申報日期變量Dim date1 As Date, date2 As Date
  2. 可變

    date1 = ws1.Cells(j, 9) date2 = ws1.Cells(j, 12)

  3. 使用變量設定值

    If Year(date1) = Year(Date) Or Year(date2) = Year(Date) Then

+0

它的工作原理,謝謝!爲什麼這會在我的代碼中產生變化?我很好奇。 – paulinhax

+0

@paulinhax說實話,我不知道。它以某種方式與日期格式的差異相關聯。 VBA使用美國格式,這是'mmddyyyy',Excel使用您的區域,在歐洲(我想它在歐洲無處不在)是'ddmmyyyy'。因爲這個VBA不理解從單元直接獲取的日期,無論設置什麼格式。竅門從某種程度上來說,將Excel格式的日期轉換爲VBA格式,並正確執行。它也可用於設置從VBA到單元格的日期。如果你直接這樣做,你可能會錯過月份和日期。 –