호출 기능을 가진 공용 변수


0

나는 실수가 무엇인지 알아 내려고 노력하고 이미 구글에 두 시간을 보냈다.

변수, 배열 및 4 개의 숫자가 포함 된 배열 (ArrayTestPrime)을 만들었습니다. 나는 그것을 모든 "Subs"위에 선언 했으므로 전체 모듈에서 볼 수 있어야합니다.

첫 번째 절차에서 배열 (ArrayTestPrime)의 element (0) 값을 변경하고 인쇄하고 싶습니다. 그런 다음 Procedure_2 print를 호출 한 다음 sheet (1)에서 row1의 루프를 통해 다시 변경하십시오.

디버그 print 나에게 이것을 보여줍니다 :

 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

도와주세요! 나는 어떤 종류의 도움을 주셔서 감사합니다!

답변:


0

변수 할당에 두 가지 문제가 있습니다 ...

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

고맙습니다! 귀하의 수정으로 인해 코드 구조에 대해 생각하게되었습니다 (20-30 줄을 다시 쓰고 더 유연하고 간단하게 만듭니다).
Andre

도움이 되서 다행입니다. =)
Anaksunaman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.