【问题标题】:VBA. "Type mismatch: array or user-defined type expected"VBA。 “类型不匹配:需要数组或用户定义类型”
【发布时间】:2017-06-28 18:49:34
【问题描述】:

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

【问题讨论】:

  • I am completely new to VBA....这段代码是你写的吗?
  • 是的。我有其他语言的经验
  • 您需要删除snake_case 并采用PascalCase 作为成员名称。在 VBA 中,下划线有特殊的含义;你的函数不能重构为这样命名的接口。

标签: vba excel


【解决方案1】:

问题是函数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。你不能像这样对数组进行标注。

我建议阅读数组。

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

【讨论】:

  • 恭喜你达到了 100K!再来一个!
  • 谢谢你们 :)
  • I seriously think so =) - “假设您的个人资料中有一个有效的电子邮件地址,并且您选择接收我们的电子邮件,您应该会在达到声誉阈值的一周内收到一封自动电子邮件。如果不是,请检查您的垃圾邮件文件夹并确保它没有出现在那里。”
  • 新闻提醒!在 eBay 上大快朵颐!
  • 再次恭喜 - 下一站 250K!
【解决方案2】:

这个呢?制作第二列索引号(按从小到大的顺序),然​​后按原始列对两行进行排序。我已经包括下面的例子来说明: A = 原始数字列, B = 索引号列 D & E 是 A & B 按 A 列排序的结果 答案是:最小的数字“0”在索引 7 处

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    相关资源
    最近更新 更多