运行时错误91对象变量或未设置块变量的情况

时间:2019-06-09 19:04:23

标签: excel vba

我试图根据该行的特定单元格中存在的数字突出显示一行,但弹出运行时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的单元格的行,然后引发错误。

1 个答案:

答案 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。并尽可能避免使用“主动/选择”(即几乎始终)