【问题标题】:How do I call upon an array created by a different function?如何调用由不同函数创建的数组?
【发布时间】:2017-05-17 02:56:18
【问题描述】:

我正在尝试在另一个用户定义函数中使用从用户定义函数创建的数组。对于这个练习,我有两个独立的函数。

第一个函数将从范围输入创建一个数组并对值求和(是的,我知道有一个 excel 内置求和函数,但这只是为了练习)。

第二个函数将调用在第一个函数中创建的数组,并将值与第二个范围输入相加。请参阅以下代码。

            Function first_funct(list_1 As range) As Double

                Dim extent As Integer
                extent = list_1.rows.Count

                Dim main_array() As Double
                ReDim main_array(1 To extent)
                Dim i As Integer

                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

            End Function

            Function second_funct(list_2 As range) As Double

                Dim extent As Integer
                extent = list_2.rows.Count
                'Assume the extent of list_2 is equal to extent of list_1 in first function.

                Dim i As Integer

                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

我的问题是:如何使用在第一个函数中创建的main_array,以便可以将它用于第二个函数。

实际上,我有数百个需要计算的单元格,并且为每个单元格创建相同的数组效率低下。我想一次创建一个数组(在本例中为函数 #1)并使用一个更简单的函数(函数 #2)来调用保存的数组,从而为我节省了许多代码行和时间。

提前致谢。

【问题讨论】:

  • 全局变量是在许多函数和子程序中使用的变量。你可能想让你的数组全局化。
  • 要添加到@A.S.H,只需将Dim main_array() As Double 行移到这两个函数的顶部。应该工作。
  • 您将数组作为参数传递,或者如果只有一个和程序的要点,则将其声明为全局。适度使用的全局变量通过使事情变得简单来加速程序。

标签: arrays excel vba function range


【解决方案1】:

将数组存储在全局变量中是可行的方法。但是这种方法的一个问题是您已经将依赖项引入到 Excel 看不到的 second-func 中。解决这个问题比让数组全局化更复杂。

因此,您必须以某种方式确保在此 Excel 会话中已在 second-func 之前计算 first_func,并且在重新计算 first-func 时(例如,因为 list_1 已更改),所有 second-Func 都会重新计算。

所以你必须这样做:

  • 在您的 Workbook_Open 事件中,您需要重新计算 first-func(到 当您重新打开工作簿并且全局数组为空并需要重新创建时处理这种情况)
  • Second_func 需要有一个附加参数来引用 包含 first-Func 的单元格(以便 Excel 重新计算 每当 list_1 发生变化和 func-1 重新计算时,它都会显示)

【讨论】:

  • 全局变量有效,你是对的,second_funct 现在给我带来了问题,因为依赖。现在我的目标是避免这种方法,因为出现的问题。你介意看看我的新代码吗?请参阅此处的链接:stackoverflow.com/questions/41477553/… 出于某种原因,代码给我带来了麻烦。我的目标是确保一切都会自动计算。
猜你喜欢
  • 2015-10-04
  • 1970-01-01
  • 2019-05-06
  • 2019-01-31
  • 2012-02-20
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多