|
现在才开始学习,有个疑问:
原帖如下:
第1部分Range(单元格)对象
技巧5 查找单元格
5-1 使用Find方法
#001 Sub RngFindNext()
#002 Dim StrFind As String
#003 Dim Rng As Range
#004 Dim FindAddress As String
#005 StrFind = InputBox("请输入要查找的值:")
#006 If Trim(StrFind) <> "" Then
#007 With Sheet1.Range("A:A")
#008 Set Rng = .Find(What:=StrFind, _
#009 After:=.Cells(.Cells.Count), _
#010 LookIn:=xlValues, _
#011 LookAt:=xlWhole, _
#012 SearchOrder:=xlByRows, _
#013 SearchDirection:=xlNext, _
#014 MatchCase:=False)
#015 If Not Rng Is Nothing Then
#016 FindAddress = Rng.Address
#017 Do
#018 Rng.Interior.ColorIndex = 6
#019 Set Rng = .FindNext(Rng)
#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
#021 End If
#022 End With
#023 End If
#024 End Sub
代码解析:
RngFindNext过程在工作表Sheet1的A列中查找InputBox函数对话框中所输入的值,并将查到单元格底色设置成黄色。
第8行到第17行代码使用Find方法在工作表Sheet1的A列中查找。
第16行代码将查找到的第一个单元格地址赋给字符串变量FindAddress。
第18行代码将查找到的单元格底色设置成黄色。
第19行代码使用FindNext方法进行重复搜索。FindNext方法继续执行用Find方法启动的搜索。查找下一个匹配相同条件的单元格并返回代表单元格的Range对象,语法如下:
expression.FindNext(After)
参数expression是必需的,返回一个Range对象。
参数After是可选的,指定一个单元格,查找将从该单元格之后开始。
第20行代码如果查找到的单元格地址等于字符串变量FindAddress所记录的地址,说明A列已搜索完毕,结束查找过程。
疑问代码部分:
#015 If Not Rng Is Nothing Then
#016 FindAddress = Rng.Address
#017 Do
#018 Rng.Interior.ColorIndex = 6
#019 Set Rng = .FindNext(Rng)
#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress
既然FindNext(Rng)是从当前单元格之后搜索,则Rng.Address 永远也不会等于 FindAddress,即:
#020 Loop While Not Rng Is Nothing And Rng.Address <> FindAddress中的And Rng.Address <> FindAddress是多余的!
这部分代码(#015 至#020 )可简化为:
Do While Not Rng Is Nothing
Rng.Interior.ColorIndex = 6
Set Rng = .FindNext(Rng)
Loop
不知道我理解的正不正确?望高手指点!谢谢! |
|