2016-02-24 33 views
3

这可能看起来像一个简单的问题,但林非常新的VBA和林不知道为什么我收到错误。错误代码是91找到

Dim c As String 
c = Sheet2.Range("B3:B54").Find("NLwk01") 

错误代码是91:对象变量或带块变量未设置。

我想我应该可以用于细胞的替代范围,但给出了

错误代码5的另一个错误:无效的过程调用或参数。

+0

'find'返回一个范围对象,我认为...所以你需要声明'c'作为范围。并执行'set c ='。 – findwindow

+0

绝对正确,[它返回一个范围](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx),所以你有一个不匹配。 – Raystafarian

+1

如果** NLwk01 **实际上存在于B3:B54内,则您的代码将起作用。如果是这种情况,则自[Range.Value属性](https://msdn.microsoft.com/en-us/library/office/ff195193.aspx)开始,将** NLwk01 **分配给** c **。是[Range对象](https://msdn.microsoft.com/en-us/library/office/ff838238.aspx)的defult属性。如果找不到(并且您没有使用足够的参数来正确定义[Range.Find方法](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx)),那么存在什么都没有分配给** C **,并且您收到错误91. – Jeeped

回答

1

正如在评论跟帖提到,Excel的VBA Find()函数返回Range对象。因此,有关你具体的例子,它可以被编码为下面的示例代码段:

Sub FindRowIndex() 
    Dim c 
    Dim rowIdx As Integer 
    Dim cellValue As String 

    'return Range object if found 
    Set c = Sheet2.Range("B3:B54").Find("NLwk01") 

    If Not c Is Nothing Then 
     'return the row index (shown as an example) 
     rowIdx = c.Row 
     'return the same string used as search criterion "NLwk01" 
     cellValue = c.Value 
    End If 
End Sub 

有关您的案件搜索区域("B3:B54")的rowIdx可以声明为Integer;对于扩展区域,您可以使用Long

此外,正如评论主题中所述,您可以声明:Dim c As Range

希望这可能有所帮助。

+0

为什么不声明** rowIdx **作为** Long **和** c **作为** Range **? – Jeeped

+0

我想OP想把单元格的值存入变量,而不是单元格的位置。 – findwindow

+0

@Jeeped:对于编码的简单性,c被声明为一个变体,但是,同意它可以被声明为Range。最好的祝福, –