VBA 的 Date 类型比较奇怪。
测试:
1. 新建一个空白的 Excel 文档,在 A1 单元格输入 2009-11-12。
2. 打开 VBA 编辑器,插入模块,增加下面这个宏
Sub test()
MsgBox #11/12/2009# = Range("A1").Value ' true
MsgBox VarType(#11/12/2009#) = VarType(Range("A1").Value) ' true
MsgBox Application.WorksheetFunction.Match(#11/12/2009#, Range("A1"), 0) ' error
End Sub
3. 按 F5 运行 test 宏,可以看到 Range("A1")的类型和值都和#11/12/2009#一致(通过对 range("A1")的监视也可以看出这一点),都是 Date 类型,但是如果用 match 去匹配的话,却出现错误。
解决方法,在匹配中将要匹配的 Date 类型的数据强制转换成 Long 类型去匹配。
MsgBox Application.WorksheetFunction.Match(CLng(#11/12/2009#), Range("A1"), 0)
对其原理还是不清楚,不知道有没有看到的高手来做一下解释。
Q. E. D.