这可能看起来像一个简单的问题,但林非常新的VBA和林不知道为什么我收到错误。错误代码是91找到
Dim c As String
c = Sheet2.Range("B3:B54").Find("NLwk01")
错误代码是91:对象变量或带块变量未设置。
我想我应该可以用于细胞的替代范围,但给出了
错误代码5的另一个错误:无效的过程调用或参数。
这可能看起来像一个简单的问题,但林非常新的VBA和林不知道为什么我收到错误。错误代码是91找到
Dim c As String
c = Sheet2.Range("B3:B54").Find("NLwk01")
错误代码是91:对象变量或带块变量未设置。
我想我应该可以用于细胞的替代范围,但给出了
错误代码5的另一个错误:无效的过程调用或参数。
正如在评论跟帖提到,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
。
希望这可能有所帮助。
为什么不声明** rowIdx **作为** Long **和** c **作为** Range **? – Jeeped
我想OP想把单元格的值存入变量,而不是单元格的位置。 – findwindow
@Jeeped:对于编码的简单性,c被声明为一个变体,但是,同意它可以被声明为Range。最好的祝福, –
'find'返回一个范围对象,我认为...所以你需要声明'c'作为范围。并执行'set c ='。 – findwindow
绝对正确,[它返回一个范围](https://msdn.microsoft.com/en-us/library/office/ff839746.aspx),所以你有一个不匹配。 – Raystafarian
如果** 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