Excel-VBA的Range.Find问题

版权声明:本文为博主原创文章,未经博主允许也可随便转载。 https://blog.csdn.net/gtclulong/article/details/53500839

前两天一直使用的一个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)

替代执行


展开阅读全文

没有更多推荐了,返回首页