假设我有以下琐碎的任务:
- 连续写出 2016 年 1 月到 2018 年 6 月的第一个日期
- 找到 01-Janu-2016 并将其涂成红色
- Use
Range.Find()
因此,我创建了一个代码,从 1 循环到 30 并写入每个月的第一个日期。然后我用Rows(1).Find(CDate("01.01.2016"))
or Rows(1).Find(DateSerial(2016,1,1))
我认为我的任务已经准备就绪。
我运行代码,在 Excel 2010 和 Excel 2016 中都看到了这一点:
问题:这背后有什么原因吗?或者是Range.Find()
函数记录为这样的行为?
Public Sub TestMe()
Cells.Clear
Dim cnt As Long
For cnt = 1 To 30
Cells(1, cnt) = DateAdd("M", cnt - 1, DateSerial(2016, 1, 1))
Cells(1, cnt).NumberFormat = "MMM-YY"
Next cnt
Dim foundRange As Range
Set foundRange = Rows(1).Find(CDate("01.01.2016"))
'Set foundRange = Rows(1).Find(DateSerial(2016, 1, 1)) 'the same false result
'Set foundRange = Rows(1).Find("01.01.2016") 'does not find anything
If Not foundRange Is Nothing Then
foundRange.Interior.Color = vbRed
End If
End Sub
一般来说,Range.Find()
有一个可选的After
参数,它是第一个单元格Range
。在我们的例子中,After
参数被省略,因此被认为是A1
它是最后检查的。如果您在第一个循环后停止代码并手动删除Nov 16
来自 Excel,然后继续代码,它将返回单元格Jan 16
in red.
至于十一月被认为找到了,它就把它还给它,并且不再进一步。问题更像是——逻辑是什么2016 年 11 月 1 日与2016 年 1 月 1 日,甚至部分?