VBA中的Date类型的匹配问题

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)

对其原理还是不清楚,不知道有没有看到的高手来做一下解释。

写于2009年十一月 21日

关于, »
3条留言 -> 跳到留言表格
  • At 2009.11.22 10:14, Sunny said:

    我也第一次知道,囧

    • At 2009.11.22 13:29, zhiqiang said:

      的确是比较诡异,好像match不直接支持date类型,都是转化为数来匹配的。

    • At 2011.10.21 13:09, Thought this was cool: 获取股票价格的Excel函数 « CWYAlpha said:

      [...] VBA中的Date类型的匹配问题 [...]

      (Required)
      (Required, not published)

        B | I | U | D | 添加链接 | 插入引用 | 插入代码 | 插入表情 | | + | ?

      guest | 注册 | 管理

      阅微堂

      理工科背景的证券从业人员
      Loading...
      Loading...
      Loading...