在VBA中使用application.match时出现错误2042

时间:2015-01-16 07:30:34

标签: vba excel-vba excel

我试图在VBA中找到数组中整数的索引。

我这样创建了数组。

Dim spot(11) as Integer
For index = 1 To NoOfSpotValues
   spot(index) = Cells(15 + index, 7)
Next

当我这样做时:

posOfSpot = Application.Match(0, spot, False)

它给我一个错误     posOfSpot =错误2042。

我该如何解决?试过搜索。需要一些指导。

修改

Function Find(ByVal Value As Variant, arr As Variant) As Integer
If arr.Exists(Value) Then
    index = arr(Value)
Else
    index = -1
End If

2 个答案:

答案 0 :(得分:3)

如果您愿意使用公式代替VBA,则可以

=MATCH(0 ,G16:G26,0)

如果找不到该值,它将返回#N/A,否则返回索引。

Sub Find(ByVal Value As Integer)
Dim spotData
Dim index As Integer

Set spotData = CreateObject("Scripting.Dictionary")
For index = 1 To 11
    spotData.Add Cells(15 + index, 7).Value, index
Next

If spotData.Exists(Value) Then
    index = spotData(Value)
Else
    index = -1
End If

Set spotData = Nothing
Debug.Print index
End Sub

答案 1 :(得分:1)

Dim spot(1 to 11) as Long
Dim posOfSpot& , index&
For index = 1 To NoOfSpotValues
   spot(index) = Cells(15 + index, 7).value
Next index


posOfSpot = Application.Match(0, spot, 0)
msgbox posOfSpot

试过这个,有效。

但是,代码会更快,在数组中使用一个简单的循环来找到你的值