我对Cells.Find
函数有疑问。主要是,我有一个包含 n 行和2列的数组,在其中存储了一些值(我使用Variant
数据类型,因为它是通用的,我希望我的代码能够正常工作现在,不对其进行优化)。然后我想从该数组中找到一个范围内的值。我的代码看起来像这样:
Dim arr() As Variant
Dim x As Variant
Dim y As Variant
last_row = ws.Range("A1").End(xlDown).Row
x = last_row - 1
y = last_row - 1
ReDim arr(x,y)
For i = 0 To x
arr(i,0) = ws.Cells(i + 2, 10).Value
arr(i,1) = ws.Cells(i + 2, 11).Value
Next
现在,如果我想在arr(0,0)
的{{1}}中查找和存储一个值,我将无法这样做:
ws.Range("B2:B100")
因为它显示
错误91,未设置对象变量或带块变量。
我要做的是这样的:
ws.Range("B2:B100").Find(arr(0,0)).Select
然后它起作用。你知道为什么吗?
答案 0 :(得分:0)
好吧,我意识到了问题所在-我将数据格式化为时间,问题是电子表格和vba之间的时间格式不匹配。主要是在vba中,您将数字转换为可见的h:mm:ss(例如1:12:13),而在vba中,使用Format(x,“ h:mm:ss”),您总是会得到hh:mm:ss(例如01:12:13)。这就是为什么它显示错误91的问题。即使它存在于搜索区域中,它也无法找到该值。谢谢大家的回答:)
答案 1 :(得分:-1)
它给您一个错误,因为查找未找到任何内容。试试这个:
Set fnd = ws.Range("B2:B100").Find(arr(0, 1))
If Not fnd Is Nothing Then fnd.Select