您的位置:首页 > 编程语言 > VB

Excel-VBA的Range.Find问题

2016-12-07 08:06 603 查看
前两天一直使用的一个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)
替代执行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  VB excel