未找到任何内容时,Excel宏搜索以错误结束

时间:2013-10-03 04:36:06

标签: excel excel-vba vba

我的案例1 excel宏代码只要搜索找到数据就会运行,但是当搜索结果中没有任何内容时会弹出所述错误。所以我试着加入一套“套装”,参见案例2 ......但是案件在任何搜索中都会爆炸。

案例1:运行时错误'91':对象变量或未设置块变量

 Cells.Find(What:=sCurrentISOtext & "_", After:=ActiveCell, _
            LookIn:=xlFormulas, LookAt :=xlWhole , _
           SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
            MatchCase:= False, SearchFormat:=False).Activate

案例2:运行时错误'424':需要对象

  Dim c As Range 

  Set c = Cells.Find(What:=sCurrentISOtext & "_", After:=ActiveCell, _
                     LookIn:=xlFormulas, LookAt :=xlWhole, _
                     SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                     MatchCase:= False, SearchFormat:=False).Activate
你是说这个意思吗?它仍然失败。

案例3:运行时错误'91':对象变量或未设置块变量

Dim c As Range      

c = Cells.Find(What:=sCurrentISOtext & "_", After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlWhole = 0, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase _
        :=False, SearchFormat:=False)

If Not c Is Nothing Then   
    c.Activate     
    ' and do something here < > 
End If 

2 个答案:

答案 0 :(得分:4)

这自然会失败,你在null(失败)结果上调用“activate” - 所以没有什么可以在运行时激活。你必须包装一个If语句 -

Dim c As Range

Set c = Cells.Find(What:=sCurrentISOtext & "_", _
                   After:=ActiveCell, _
                   LookIn:=xlFormulas, _
                   LookAt:=xlWhole = 0, _
                   SearchOrder:=xlByColumns, _
                   SearchDirection:=xlNext, _
                   MatchCase:= False, _
                   SearchFormat:=False)

If c Is Nothing Then
    'do something
Else
    c.Activate
End If

答案 1 :(得分:-1)

这是我在匆忙中使用的一项丑陋的工作 - 有更优雅的错误陷阱,但这样就完成了。

On Error GoTo notFound
Dim c As Range

Set c = Cells.Find(What:=sCurrentISOtext & "_", _
                   After:=ActiveCell, _
                   LookIn:=xlFormulas, _
                   LookAt:=xlWhole = 0, _
                   SearchOrder:=xlByColumns, _
                   SearchDirection:=xlNext, _
                   MatchCase:=False, _
                   SearchFormat:=False)
c.Activate
Exit Sub

notFound:

Application.InputBox "Could not find the range you wanted." 
' >> You can put in whatever action you want here -- for example,        <<
' >> if you're using this as a module, then "Exit Sub" or "Goto nextOne" <<
' >> could be used go to the next step in your process.                  <<