2017-03-10 46 views
1

目前有以下代码找到一定值所在的行,但它使调试与MS Excel的VBA - 查找函数来获得排

错误91“对象变量或带块变量未设置”

这很奇怪,因为我使用相同的确切结构在此过程之前找到一行,它的工作原理非常完美。任何提示,将不胜感激!

wbs.Activate 
     Cells.Find(What:="Name", After:=wbs.Range("A1"), LookIn:=xlFormulas, _ 
      LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
      MatchCase:=True, SearchFormat:=False).Activate 
     NameRow = ActiveCell.Row 

UPDATE:参见下面的“我的回答”

回答

1

你唯一的问题是,当你没有工作表上.Find返回Nothing而非Range对象“名称”。然后您收到一条错误消息,因为您正尝试使用Nothing上的.Activate

解决方案

没有必要使用ActivateActiveCell,只是定义的变量以及和使用它们!这里有一个工作示例:

Sub test() 
    Dim wks As Worksheet 
    Dim r As Range 
    Dim rowNumber As Long 

    Set wks = ThisWorkbook.Worksheets("sheet1") 'update for your worksheet name 

    '.Find returns a Range object or Nothing  
    Set r = wks.Cells.Find(What:="Name", LookAt:=xlWhole) 

    If Not r Is Nothing Then 
     rowNumber = r.Row 
    End If 

    MsgBox rowNumber 
End Sub 
0

显然有“姓名”后面输入一个空格,所以我应该一直在寻找的“名称”。修改了搜索,并按照我的方式工作,但是感谢@CallumDA提供了干净的答案。所以我的问题是,它无法找到我的查找变量,这又意味着它无法激活找到的单元格导致错误91!非常感谢您的快速回复。