将第一个函数中创建的数组传递给第二个函数

2024-01-21

这个问题是从我的上一个问题开始的,主要是因为我想避免使用全局变量,因为它的局限性。请参阅此处链接的答案:如何调用由不同函数创建的数组? https://stackoverflow.com/questions/41436347/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 语句将拾取它。我现在也不确定第二个函数是否正确,因为第一个函数给了我错误。

提前致谢。


您的两个数组都是用强类型声明的,并且您以正确的方式传递它们。您的问题不在于数组的类型,而在于顺序,或者更确切地说是第二个函数的参数的省略。

Your second_funct函数需要 2 个参数list_2 As Range, ByRef main_array() As Double,但您只提供一个参数:

Call second_funct(main_array)

假设你想通过一个范围AND一个数组,尝试将其更改为:

Call second_funct(list_1, main_array)

或者更好的是,删除Call声明,然后使用:

second_funct list_1, main_array
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将第一个函数中创建的数组传递给第二个函数 的相关文章

随机推荐