Excel VBA月函数抛出类型不匹配

Excel VBA月函数抛出类型不匹配,vba,excel,Vba,Excel,以下是我在A列中的数据: 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

以下是我在A列中的数据:

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脚本时,Month函数在此设置中工作正常

2) 有没有更好的方法将文本解析为日期?日期字符串的格式与excel认为的日期太不一致,这就是我发出多个MID的原因。

VBA中的
Month()
函数取一个日期,并仅返回数字(整数)月份(例如,如果您在2013年5月1日下午4:30传递它,则返回1)。您得到的类型不匹配是因为您试图将月份缩写(例如“SEP”)传递给month()函数,而month()函数实际查找的参数是日期类型,而不是字符串

您可以使用
CDate()
函数将值转换为日期:

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

显示“9/23/2013 8:58:35 AM”

A列的单元格格式是什么

如果是通用格式,则表示这将起作用

k=“2013-SEP-04 10:51:42” l2=月份(日期值(格式为k,“YYYY MMMM dd”))


如果不是,请使用excel中的格式再次与我联系。

解释清楚,解决方案简洁。如果OP的格式对他的所有作品都是一致的,我也会使用CDate
MsgBox月(CDate(“2013-SEP-23 08:58:35”)
返回9,这足够完美,可以根据OP的需要进行操作。@roryap-谢谢,这很有效。我没有给Month整个字符串值,而是使用MID函数将值分为天、月和年。无论如何,你的解决方案更好,更容易阅读,非常好。谢谢