VBA-Cells.Find不适用于从数组中获取的值吗?

时间:2019-07-08 10:02:09

标签: arrays excel vba

我对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

然后它起作用。你知道为什么吗?

2 个答案:

答案 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