我遇到了 VBA Range.Find 方法的问题。代码所做的是查看工作簿中的所有工作表,查找与数组中数据的任何匹配项,并更改具有与该数据相同值的单元格的颜色。
该代码在第一张纸上完美运行。然后,在下一张纸上,它陷入无限循环。单步执行代码后,Find 似乎在第一次在此页面上运行时返回一个范围格式(“A2:A2”)的地址,但之后又恢复为单元格格式(“A2”)。它不会在第一页上这样做,只是在第二页上。
我可以编写一些代码来检查返回的值并将其修整,但我想解决这个问题,而不是在上面打补丁。
这是中断的代码:
For x = 1 To UBound(wksSheets)
For y = 0 To (UBound(findData) - 1)
With wkb.Worksheets(x)
Set rng = .Range(DataRange).Find(findData(y), LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not rng Is Nothing Then
StrtAdd = rng.Address
Do
.Range(rng.Address).Interior.ColorIndex = 3
Set rng = .Range(DataRange).FindNext(rng)
Loop While Not rng Is Nothing And Not rng.Address = StrtAdd
End If
End With
Next y
Next x
第一次通过第二页时,rng.Address 是“A2:A2”并存储在 StrtAdd 中。然后,当代码点击 .FindNext(rng) 时,rng.Address 更改为“A2”。因此, rng.Address 永远不会等于 StrtAdd,即使它们谈论的是完全相同的单元格。这就是无限循环。
有关解决此问题的最佳方法的任何想法?
wksSheets 是一个包含工作表名称的数组
findData 包含要查找的数据
提前致谢!!