我试图根据该行的特定单元格中存在的数字突出显示一行,但弹出运行时91错误。
单击调试后,以下代码将突出显示:
For i = 2 To 12
Selection.Find(What:=i, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=True).Activate
我尝试过的事情:
尝试1:
我删除了For
循环并手动输入了数字,例如1(What:=1
或2(What:=2
),依此类推,代码工作正常。但是在用i
替换数字时,我得到了错误消息。
尝试2:
Selection.Find(What:="" & i, After.....) 'still the same error message
Sub searchTest()
Dim firststepaddress As String
Dim i As Long
For i = 1 To 12
Selection.Find(What:=i, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True).Activate 'error at this line
firststepaddress = ActiveCell.Address
Call cellRangeHighlighter
MsgBox i
Next i
预期输出:
Selection.Find
函数应该能够理解i
中存在的数字,然后继续调用cellrangehighlighter
子过程。
实际输出:
突出显示包含数字为“ 1”的单元格的行,然后引发错误。
如果我将For
循环中的范围从2更改为12,那么它将突出显示包含2的单元格的行,然后引发错误。
答案 0 :(得分:1)
以下是使用“查找”的典型方法:
Dim sel as Range, f As Range
Set sel = Selection
For i = 2 To 12
Set f = sel.Find(What:=i, After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=True)
If Not f Is Nothing Then
'do something with f
Else
'handle not found if needed
End if
始终将结果设置为变量,然后在继续之前检查它是否不是Nothing
。并尽可能避免使用“主动/选择”(即几乎始终)