
나는 실수가 어디에 있는지 찾으려고 노력하고 이미 그것을 구글링하는 데 2시간을 보냈습니다.
변수, 배열 및 4개의 숫자라는 요소가 포함된 배열(ArrayTestPrime)을 만들었습니다. 나는 그것을 모든 "Subs" 위에 선언했으므로 전체 모듈에서 볼 수 있어야 합니다.
첫 번째 절차에서 배열(ArrayTestPrime)의 요소(0) 값을 변경하고 인쇄하고 싶습니다. 그런 다음 Procedure_2를 호출하여 인쇄한 다음 시트(1)의 row1에서 루프를 통과하고 다시 변경합니다.
디버그. 인쇄된 내용은 다음과 같습니다.
First_Procedure =
At the beginning of Second_Procedure =
Variable must be equal = 17
At the end of Second_Procedure =
그러나 실제 값은 다음과 같아야 합니다.
First_Procedure = 100
At the beginning of Second_Procedure = 100
Variable must be equal = 17
At the end of Second_Procedure = 17
내 두뇌를 강타하는 내 코드 :
Public Article As String
Public ArticleCol As Variant
Public ArrayTestPrime As Variant
Public ArrayInArray() As Variant
Sub First_Procedure()
Article = "ARTICLE"
ArrayTestPrime = Array(ArticleCol, ArrayInArray(), 1, 2, 2, 1)
ArticleCol = 100
Debug.Print "First_Procedure = " & ArrayTestPrime(0)
Call Second_Procedure
End Sub
Sub Second_Procedure()
Dim Sub_J As Integer
Debug.Print "At the beginning of Second_Procedure = " & ArrayTestPrime(0)
For Sub_J = 1 To 27
If Cells(1, Sub_J) = Article Then ArticleCol = Sub_J
Next Sub_J
Debug.Print "Variable must be equal = " & ArticleCol
Debug.Print "At the end of Second_Procedure = " & ArrayTestPrime(0)
End Sub
도와주세요! 어떤 종류의 도움이라도 감사하겠습니다!
답변1
변수 할당에 두 가지 문제가 있습니다 ...
1) 다음 코드에서 주문이 반전되었습니다.
Sub First_Procedure()
Article = "ARTICLE"
→ ArrayTestPrime = Array(ArticleCol, ArrayInArray(), 1, 2, 2, 1) 'ArticleCol = ""
→ ArticleCol = 100
Debug.Print "First_Procedure = " & ArrayTestPrime(0) 'ArticleCol = ""
그것은해야한다:
Sub First_Procedure()
Article = "ARTICLE"
→ ArticleCol = 100
→ ArrayTestPrime = Array(ArticleCol, ArrayInArray(), 1, 2, 2, 1) 'ArticleCol = 100
Debug.Print "First_Procedure = " & ArrayTestPrime(0) 'ArticleCol = 100
2) ArrayTestPrime(0)의 값을 설정하는 것을 잊었습니다.
For Sub_J = 1 To 27
If Cells(1, Sub_J) = Article Then ArticleCol = Sub_J
Next Sub_J
→ ArrayTestPrime(0) = ArticleCol 'We must set our new value for ArrayTestPrime(0)
Debug.Print "Variable must be equal = " & ArticleCol
Debug.Print "At the end of Second_Procedure = " & ArrayTestPrime(0)
End Sub