이 질문은 제한 사항 때문에 전역 변수를 사용하지 않으려 고하기 때문에 주로 마지막 질문에서 작성한 것입니다. 여기에 링크 된 답변을 참조하십시오 : 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 문을 배열을 전달할 것이라고 그것을 집어 것이다. 나는 또한 두 번째 함수가 올바른지에 대해서도 확신하지 못한다. 첫 번째 함수가 나에게 오류를주기 때문이다.
미리 감사드립니다.
(list_2, main_array). 배열은 포인터에 의해 실제로 전달되고 변형은 자동으로 암시 적 포인터를 처리합니다. 어떤 경우에 - main_array가 선언 된 방법과 장소 (어디서 재구성 되는가가 아닌)? 희망적으로 그것은 어딘가에 선언된다. 그렇지 않다면 변수가 변하게됩니다. (그리고 당신은'Option Explicit'을 사용하지 않습니다.) 이것은 타입 불일치를줍니다. –
어 혹시'option explicit'을 포함하는 것을 잊었습니다.나는 당신의 다른 제안을 따랐고 여전히 같은 오류가 발생합니다. – Soto