前两天一直使用的一个VBA宏突然运行结果错误,仔细核查发现是Range.Find找不到结果:
Set searchRng = Sheet3.Range(Sheet3.Cells(2, "C"), Sheet3.Cells(2, "C").End(xlToRight))
For i = 1 To colCount - 2
Set rng = searchRng.Find(Sheet2.Cells(6, "B").Offset(, i))
If Not rng Is Nothing And rowCount > 7 Then
For j = 7 To rowCount - 1
Select Case Sheet2.Cells(j, "B")
Case 9
Sheet3.Cells(4, rng.Column) = Sheet2.Cells(j, i + 2)
Case 12
Sheet3.Cells(6, rng.Column) = Sheet2.Cells(j, i + 2)
Case 15
Sheet3.Cells(8, rng.Column) = Sheet2.Cells(j, i + 2)
Case 17
Sheet3.Cells(10, rng.Column) = Sheet2.Cells(j, i + 2)
End Select
Next j
End If
Next i
断点调试的结果是,rng始终为nothing,而Sheet2.Cells(6,"B").Offset(,i)是日期格式,但与searchRng的日期格式不一致。
百般折腾,使用Sheet2.Cells(6,"B").Offset(,i).Value、Sheet2.Cells(6,"B").Offset(,i).Value2,Find时使用参数LookIn:=xlValues,都是不起作用。
因为急着使用,所以用Format(CDate(Sheet2.Cells(6,"B").Offset(,i).Value),"m/d")更改了所有类似的代码,得以渡过难关。
问题是,这个VBA代码没有改动过,Excel中单元格格式也没有改动过,究竟是哪里出了问题?
-----------------------------------------------------------------
后来又出现了问题,2017/1/1和2017/1/2查找不到,但是2017/1/3能找到。使用Lookat:=xlWhole查找整个内容。
暂时用
Set rng = searchRng.Find(what:=Sheet2.Cells(6, "B").Offset(, i).Text,Lookat:=xlWhole)
替代执行