2017-12-29 41 views
0

私はこのコードを持っています:1から10までの2つのループがあります。各ループで変数kが宣言されます。現在のスコープエラーの重複宣言。同じ変数を持つ2つのループ、可変スコープ

Sub Test() 
    Dim i As Long 
    For i = 1 To 10 
     Dim k As Long 
     k = i * 2 

     Debug.Print k 
    Next 


    Dim j As Long 
    For j = 1 To 10 
     Dim k As Long 'error here 
     k = j * 2 

     Debug.Print k 
    Next 

End Sub 

しかし、実行しようとすると、duplicate declaration in the current scopeエラーが発生します。なぜ私はそれを得るのか分かりません - は、ループ内で変数のスコープではなく、と宣言されていますか?同じ名前の変数を2番目のループに作成することができるように、最初の変数の残りの部分を削除する方法はありますか?

答えて

1

プロシージャ内で変数を宣言すると、この変数はloopsだけでなく、すべてのプロシージャに対して有効です。 k = 0

ローカル変数がDimステートメントで宣言されている場合、変数は宣言されているプロシージャが実行されている間だけ存在し続けます。通常、プロシージャの実行が終了すると、プロシージャのローカル変数の値は保持されず、それらの変数に割り当てられたメモリが解放されます。次回プロシージャが実行されると、そのローカル変数のすべてが再初期化されます。

https://support.microsoft.com/en-us/help/141693/scope-of-variables-in-visual-basic-for-applications

http://www.excel-easy.com/vba/examples/variable-scope.html

+0

リンクを引用しないでください。彼らは引用符ではありません。 – TylerH

+0

変数 'k'を' forループ 'の中で宣言するのは意味がありません。なぜなら、ループ' k' **が何度も何度も繰り返し宣言されているからです。 あなたの変数 'k'を' forループ 'の外側に宣言することを強くお勧めします – Moreno

関連する問題