2016-04-12 25 views
0

我日期的excel文件格式爲Mar 30 2016 10:12:27:396AM我想將格式更改爲mm/dd/yyyy。但我有我的代碼中的錯誤..VBA - 日期格式「mm/dd/yyyy」

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

這是我得到了錯誤的行SecondDate = Trim(Sheet2.Range("B" & RowNo).Value)

注意 :從列A和B的數據是日期

我的代碼:

Dim Result, RowNo As Long 
Dim FirstDate As Variant 
Dim SecondDate As Variant 

RowNo = 2 

    FirstDate = Trim(Sheet2.Range("A" & RowNo).Value) 
    SecondDate = Trim(Sheet2.Range("B" & RowNo).Value) 
    FirstDate = Format(FirstDate, "mm/dd/yyyy") 
    SecondDate = Format(SecondDate, "mm/dd/yyyy") 

    Do Until Sheet2.Cells(RowNo, 1) = "" 

    FirstDate = Sheet2.Cells(RowNo, 1) 
    SecondDate = Sheet2.Cells(RowNo, 2) 

     If DateDiff("d", FirstDate, SecondDate) >= 15 Then 
     Sheet2.Cells(RowNo, 3) = "1" 
     Sheet2.Cells(RowNo, 4) = "2" 

    End If 

    RowNo = RowNo + 1 
    Loop 

我確實感覺自己在正確的道路上..我錯過了什麼?

更新:我的腳本將Column AColumn B獲取數據,並使用則DateDiff功能我會如果兩列不同的是< 15標籤從Column C and D作爲1, 2

記:

  • 我只減去bot的日子h列..但是有可能減去日和年?
  • 它的工作,如果我在Excel中使用的格式mm/dd/yyyy的,但如果我使用其他格式的我得到了錯誤不匹配

更新2

 Column A   | Column B     | Column C 
Mar 1 2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM | 
Mar 1 2016 10:12:27:396AM | Mar 30 2016 10:12:27:396AM | 

在我的文件這是日期格式,如果你嘗試這個樣本數據,它不會工作,也許是因爲VBA不認識到這是dateformat?

+0

'TRIM(Sheet2.Range( 「A」 &RowNo)。價值)'和'格式(FirstDate中, 「mm /日/年」)'返回一個字符串,不一個約會。 – assylias

+0

如果我懸停'SecondDate',仍然有錯誤,我得到'SecondDate = 12:00:00 AM'的值' – 7A65726F

+0

DIM語句將FirstDate設置爲Variant和SecondDate作爲Date。 FirstDate的計算很好,因爲它是變體。 SecondDate的計算是錯誤的,因爲您正在爲日期數據類型分配一個字符串。 – OldUgly

回答

1

也許這會解決你正在嘗試做的事情。

測試輸入:

enter image description here

測試輸出:

enter image description here

代碼:

Sub DateStuff() 
    Dim FirstDate As Range, SecondDate As Range 
    Dim RowNo As Long 

    Set FirstDate = Sheet4.Range("A1") 
    Set SecondDate = Sheet4.Range("A2") 

    FirstDate.NumberFormat = "mm/dd/yyyy" 
    SecondDate.NumberFormat = "mm/dd/yyyy" 

    RowNo = 2 
    Do Until Sheet4.Cells(RowNo, 1) = "" 
     Set FirstDate = Sheet4.Cells(RowNo, 1) 
     Set SecondDate = Sheet4.Cells(RowNo, 2) 
     If IsDate(FirstDate.Value) And IsDate(SecondDate.Value) Then 
      If DateDiff("d", FirstDate, SecondDate) >= 15 Then 
       Sheet4.Cells(RowNo, 3) = 1 
       Sheet4.Cells(RowNo, 4) = 2 
      End If 
     End If 
     RowNo = RowNo + 1 
    Loop 
End Sub 

請花幾分鐘瞭解此代碼:

  • FirstDate和SecondDate是Range數據類型,而不是Date或Variant。他們指向的單元格中的數據是Date或其他內容。

  • 設置格式時,它設置它在工作表上的顯示方式。它不是格式化VBA中的字符串。

  • 在進行DateDiff調用之前,請確保FirstDate和SecondDate在單元格中確實包含Date數據類型,這樣可以避免很多錯誤。

  • 使用日期函數的日期數據類型操作不依賴格式。他們使用內部日期類型。格式化僅影響日期轉換爲字符串和/或顯示在工作表上的方式。

你問過檢查年份而不是一天。有內置的VBA功能(例如年,月等),這將有助於此。

至於你更新你的問題:

我不知道你在哪裏得到您的時間碼,但Excel不能識別:000爲毫秒。它使用.000。見下文...

enter image description here

+0

你解釋的方式是非常好的!我嘗試使用* breakpoint *來查看每行代碼中發生了什麼, – 7A65726F

+0

我的日期值就像這個'Mar 30 2016 10:12:27:396AM'它正在處理這些格式,但不是這個格式。 :( – 7A65726F

+0

舉個例子,我不知道這是什麼「這個」 – OldUgly