【发布时间】:2017-01-05 04:57:50
【问题描述】:
这个问题有点像我上一个问题,主要是因为我想避免使用全局变量,因为它有局限性。在此处查看链接的答案:How do I call upon an array created by a different function?
我正在尝试在另一个用户定义函数中使用从用户定义函数创建的数组。我想避免将数组设置为Global,因为第二个函数不会自动重新计算。对于这个练习,我有两个独立的函数。
第一个函数将从范围输入创建一个数组并对值求和。
第二个函数将调用在第一个函数中创建的数组,并将值与第二个范围输入相加。请参阅以下代码。
Option Explicit
Function first_funct(list_1 As range) As Double
Dim extent As Integer, i As Integer
extent = list_1.rows.Count
Dim main_array() As Variant
ReDim main_array(1 To extent) As Variant
' main_array() was changed from double to variant to avoid potential problems.
first_funct = 0
For i = 1 To extent
main_array(i) = list_1(i).Value
' main_array will be used again in second function
first_funct = first_funct + main_array(i)
Next i
Call second_funct(main_array)
End Function
Function second_funct(list_2 As range, ByRef main_array() As Variant) As Double
Dim extent As Integer, i As Integer
extent = list_2.rows.Count
' Assume the extent of list_2 is equal to extent of list_1 in first function.
Dim main_array() As Variant
ReDim main_main_array(1 To extent) As Variant
second_funct = 0
For i = 1 To extent
second_funct = second_funct + main_array(i) + list_2(i).Value
' How do I call upon main_array created from list_1 in the first function?
Next i
End Function
第一个函数给了我错误“ByRef 参数类型不匹配”。我的想法是,调用语句会将数组传递给第二个函数,而 ByRef 语句将接收它。我现在也不确定第二个函数是否正确,因为第一个函数给了我错误。
提前致谢。
【问题讨论】:
-
我几乎总是对数组输入和数组输出使用简单的
Variant变量,而且几乎从来没有遇到过问题。数组实际上是通过指针传递的,变体自动处理隐式指针。无论如何——main_array是如何以及在哪里声明的(不仅仅是在哪里改正)?希望它在某处宣布。如果不是 - 它是一个变体变量(并且您没有使用Option Explicit),这会导致类型不匹配。 -
哎呀忘了包括
option explicit。我遵循了您的其他建议,但仍然遇到同样的错误。
标签: arrays vba function call byref