excel vba从单元格里提取生日,显示错误13类型不匹配
Dim birthday As Date
Dim sendIndex
endRowNo = ThisWorkbook.Sheets("Sheet1").[a65535].End(xlUp).Row
ThisWorkbook.Sheets("sheet1").Select
For rowCount = 2 To endRowNo
nbirthday = ThisWorkbook.Sheets("sheet1").Range("d" & rowCount).Value
birthday = CDate(nbirthday)
单元格如下
如果您在Excel VBA中使用了CDate函数将单元格的日期值转换为日期类型,但是在运行代码时出现了“错误13:类型不匹配”,则可能是因为单元格内的值不是可识别的日期格式。
这个错误基本可以肯定是由于单元格中的值不是日期格式导致的(你那个值是2/4,不是标准日期啊)。
需要尝试转换为日期的单元格是否包含有效的日期,
并且该单元格的格式设置为日期。
如果确实是日期,才能使用CDate函数才可以转换为日期格式
~
你excel里的数据格式应该只是string 2/4 如果所有数据都这样那么估计要拼年份才可以,比如 1998/2/4 这种格式的,比如这个例子
' 举例1:
d1 = "April 22, 2001"
d2 = "6:15:45 PM"
d3 = "2014-07-24 15:43:06"
d4 = "29-Jan-21"
If IsDate(d1) And IsDate(d2) And IsDate(d3) Then
MsgBox CDate(d1) ' 22/04/2020
MsgBox CDate(d2) ' 18:15:45
MsgBox CDate(d3) ' 24/07/2014 15:43:06
MsgBox CDate(d4) ' 29/01/2021
MsgBox DateValue(d1) ' 22/04/2020
MsgBox DateValue(d2) ' 00:00:00
MsgBox DateValue(d3) ' 24/07/2014
End If
之所以会出现13错误,你要看下面这个例子就知道了
~
' 举例2:
MsgBox CDate(43972) ' 5/21/2020
MsgBox CDate("12/25/2020") ' 1/15/2014
MsgBox DateValue("12/25/2020") ' 1/15/2014
MsgBox DateValue(43972) ' Throws a Type mismatch error(Run-time error 13)
===
总结: CDate和DateValue的区别:
从上述 举例1 代码结果总结出,DateValue 只返回一个Date类型结果,而CDate返回结果将保留日期和时间,当参数为一个时间类型的时候,DateValue 只能返回一个 00:00:00的结果。
从上述 举例2 代码结果总结出,另外,DateValue (或TimeValue)只接受 String 类型的参数,而 CDate 也可以处理 数字 。
==
另外送你个大礼包 ,希望有学习VBA小工具的可以参考
github上几百star的一个学习vba文档
https://github.com/bluetata/concise-excel-vba