這個問題是根據我最後一個問題構建的,主要是因爲我想避免使用全局變量,因爲它的侷限性。請參閱此處鏈接的答案: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),這會導致類型不匹配。 –
哎呀忘了包含'選項顯式'。我跟着你的其他建議,我仍然得到同樣的錯誤。 – Soto