
どこに間違いがあるのかを見つけようとしましたが、すでにグーグル検索に 2 時間費やしました :(
変数、配列、および 4 つの数値という要素を含む配列 (ArrayTestPrime) を作成しました。これをすべての「Subs」の上に宣言したので、モジュール全体で表示される必要があります。
最初のプロシージャで配列 (ArrayTestPrime) の要素 (0) の値を変更して、それを印刷したいだけです。次に、Procedure_2 を呼び出してそれを印刷し、シート (1) の行 1 でループを実行して、再度変更します。
デバッグ。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
助けてください!どんな助けでもありがたいです!
答え1
変数の割り当てに関して 2 つの問題があります...
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