Excel VBA FindNext错过一个事件

Excel VBA FindNext错过一个事件,excel,vba,Excel,Vba,我试图复制代码来查找特定范围内的所有值,并在它们旁边的单元格中写入“here”,但我在退出循环时遇到了一个问题,它总是错过一次 谁能给我解释一下解决办法吗 子测试值() 调光范围 将第一个地址设置为字符串 具有shGCD.范围(“U:U”) Set c=.Find(“THIS”,lookat:=xlother) 如果不是,那么c什么都不是 firstAddress=c.地址 做 c、 偏移量(,1)。Value=“此处” 集合c=.FindNext(c) 在firstAddress.FindN

我试图复制代码来查找特定范围内的所有值,并在它们旁边的单元格中写入“here”,但我在退出循环时遇到了一个问题,它总是错过一次

谁能给我解释一下解决办法吗

子测试值()
调光范围
将第一个地址设置为字符串
具有shGCD.范围(“U:U”)
Set c=.Find(“THIS”,lookat:=xlother)
如果不是,那么c什么都不是
firstAddress=c.地址
做
c、 偏移量(,1)。Value=“此处”
集合c=.FindNext(c)
在firstAddress.FindNext(c.Address)时循环
如果结束
以
端接头

为清晰起见重新编码,如果没有初始发现,则捕获错误

Sub TestValue()

Dim c As Range
Dim firstAddress As String

   With ActiveSheet.Range("U:U")
    

       Set c = .Find("THIS", lookat:=xlWhole)
       If Not c Is Nothing Then
         firstAddress = c.Address()
       Else
         GoTo ExitNoMatch
       End If
       
       Do While Not c Is Nothing
         c.Offset(, 1).Value = "Here"
         Set c = .FindNext(c)
         If c.Address = firstAddress Then Set c = Nothing
       Loop

   End With

ExitNoMatch:

End Sub 'TestValue

HTH

为清晰起见重新编码,如果没有初始发现,则捕获错误

Sub TestValue()

Dim c As Range
Dim firstAddress As String

   With ActiveSheet.Range("U:U")
    

       Set c = .Find("THIS", lookat:=xlWhole)
       If Not c Is Nothing Then
         firstAddress = c.Address()
       Else
         GoTo ExitNoMatch
       End If
       
       Do While Not c Is Nothing
         c.Offset(, 1).Value = "Here"
         Set c = .FindNext(c)
         If c.Address = firstAddress Then Set c = Nothing
       Loop

   End With

ExitNoMatch:

End Sub 'TestValue
HTH

更改此项:

 Loop While firstAddress <> .FindNext(c).Address
在firstAddress.FindNext(c.Address)时循环
为此:

 Loop While firstAddress <> c.Address
在第一个地址c.地址时循环
您已经更新了
c
,因此您应该查看当前
c
的地址,而不是其后续地址。

更改此项:

 Loop While firstAddress <> .FindNext(c).Address
在firstAddress.FindNext(c.Address)时循环
为此:

 Loop While firstAddress <> c.Address
在第一个地址c.地址时循环

您已经更新了
c
,因此您应该查看当前
c
的地址,而不是它的后续地址。

尝试在
Set c=.Find(…)
指令上放置一个断点(F9),然后逐行(使用有限的数据集),使用F8。我这样做了,结果仍然是一样的。当然,结果是一样的,断点不会改变执行的方式…想法是逐行遍历代码,看看它在做什么不应该发生,或者它不做什么不应该发生。试着在
集c=.Find上放置断点(F9)(…)
指令,然后逐行执行(使用有限的数据集),使用F8。我这样做了,结果仍然是一样的。当然,结果是一样的,断点不会改变执行的方式…想法是逐行遍历代码,看看它在做什么不应该发生,或者它没有做什么不应该发生。哦!对了,你是@BigBen。我的代码确实在运行并工作ough.Oops!对了,你是@BigBen。我的代码确实运行正常。你所做的是将c设置为下一个地址,然后请求c的下一个地址。这会让你在整个过程中推迟一个记录。你所做的是将c设置为下一个地址,然后请求c的下一个地址。这会让你在整个过程中推迟一个记录党卫军。