VBA。 “类型不匹配:预期的数组或用户定义类型”

时间:2017-06-28 18:49:34

标签: excel vba excel-vba

我是VBA的新手。我需要编写一个程序,它将生成一个整数数组,并找到最小元素的索引。我收到了这个错误 “类型不匹配:预期的数组或用户定义类型。”我调查了许多类似的问题,但无法弄清楚出了什么问题。

Function random_integer(Min As Integer, Max As Integer)
random_integer = Int((Max - Min + 1) * Rnd + Min)
End Function

Function generate_array(Size As Integer)
Dim Arr(Size)
For i = 0 To UBound(Arr)
    Arr(i) = random_integer(i - 10, i + 10)
Next
generate_array = Arr
End Function

Function find_index_of_min_elem(ByRef Arr() As Variant)
Dim Min As Integer
Min = Arr(0)
Dim MinIndex As Integer
MinIndex = 0
For i = 1 To UBound(Arr)
    If Arr(i) < Min Then
        Min = Arr(i)
        MinIndex = i
    End If
Next
find_index_of_min_elem = MinIndex
End Function

Sub task6()
A = generate_array(20)
IndexOfMinElemInA = find_index_of_min_elem(A)
MsgBox IndexOfMinElemInA
End Sub

2 个答案:

答案 0 :(得分:7)

问题是函数Function find_index_of_min_elem(ByRef Arr() As Integer)期待Integer作为参数,并且您将a作为Variant

传递
a = generate_array(20)
IndexOfMinElemInA = find_index_of_min_elem(a)

您将获得的下一个错误是Dim Arr(Size) As Integer。你无法像这样对数组进行维度。

我建议阅读数组。

可能还有其他错误,但我没有检查过。

答案 1 :(得分:0)

这个怎么样?创建第二列索引号(按从小到大的顺序),然​​后按原始列排序这两行。我已经在下面举例说明: A =原始数字列, B =索引号列 D&amp; E是分类A&amp; A的结果。 B列A列 答案是:最低的数字&#34; 0&#34;是在指数7

example screenshot