2013-10-28 48 views
0

這是我在A列中的數據:Excel的VBA月功能投擲類型不匹配

2013-SEP-04 10:51:42 
2013-OCT-23 08:58:35 
2013-OCT-23 08:58:35 
2013-SEP-23 08:58:35 
2013-OCT-23 08:58:35 
2013-OCT-23 08:58:35 
2013-SEP-23 08:58:35 

這裏是我的代碼:

Sub getMonthNumber() 
' 
' getMonthNumber() 
' 

' 

    Dim rowsMonth As Long 
    Dim todaysMonth As Integer 
    Dim todaysMonthDate As Date 
    Dim column As Range, cell As Range 

    Set column = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count) 
    inactiveStaffConnected = 0 
    todaysMonth = Month(Date) - 1 
    rowsMonth = 0 

    For Each cell In column 
     rowsMonth = Month(Mid(cell.Value, 10, 2) & Mid(cell.Value, 6, 3) & Mid(cell.Value, 1, 4)) 

    Next 


End Sub 

1)爲什麼不匹配?當在Excel中直接使用它時,Month函數在此設置中工作正常,而不是VBA腳本。

2)有沒有更好的方法來解析文本到日期?日期字符串的格式太不符合excel認爲日期的原因,這就是我發佈多箇中介的原因。

回答

2

VBA中的Month()函數需要一個日期,並且只返回數字(整數)月份(例如,如果您在2013年1月5日下午4:30通過它,則返回1)。由於您試圖通過月份縮寫,例如,您遇到類型不匹配的情況「SEP」,到Month()函數時,它實際上是查找帶有日期類型的參數,而不是字符串。

MsgBox CDate("2013-SEP-23 08:58:35") 

顯示「2013年9月23日上午八時58分35秒」

+0

清楚說明,簡潔的解決方案。如果OP的格式與他的所有作品一致,我也會使用CDate。 'MsgBox Month(CDate(「2013-SEP-23 08:58:35」))'返回9,這足以滿足OP的需求。 – Manhattan

+0

@ roryap - 謝謝,這個工程。我沒有給月份整個字符串的價值,我使用MID函數將價值分解爲日,月和年。無論如何,你的解決方案更好,更易於閱讀,非常棒。謝謝。 –

0

什麼是A列的單元格的格式:

您可以使用CDate()功能的值轉換成日期。

如果是在一般格式是指這將工作

K = 「2013-SEP-04 10點51分42秒」 L2 =月(則DateValue(格式(K,「YYYY-MMM M-dd「)))

如果不意味着再次用我在excel中的格式聯繫我。