Excel-VBA的Range.Find问题

探讨VBA宏中Range.Find方法无法找到指定日期的问题,包括调试过程、问题定位及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

替代执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值