私の最初の言語として、そして他の人の例から完全に教えられたように、この例のように、スコープが適用されるモジュール、ルーチン、または関数の開始時にすべての変数宣言をグループ化するという VBA の標準的な慣行に疑問を呈したことはありません。
Sub Traditional()
Dim bVariable as Boolean
Dim OtherVariable
' Some code using OtherVariable goes here
'
' Now we use bVariable
bVariable = True
Do While bVariable
bVariable = SomeFunction()
Loop
End Sub
現在、他の言語での標準的な慣行は、次のように、変数が使用される場所のできるだけ近くで変数を宣言することであることを学んでいます。
Sub Defensive()
Dim OtherVariable as String
' Some code using OtherVariable goes here
'
' Now we use bVariable
Dim bVariable as Boolean
bVariable = True
Do While bVariable
bVariable = SomeFunction()
Loop
End Sub
これは防御的なプログラミングの実践として私には完全に理にかなっているように思えます-スパンとライブタイムの両方を制限するという点で(Code Completeで説明されているように)、VBAで同じことをしない理由があるかどうか疑問に思っていますか? 私が考えることができる考えられる理由は、メモリ、実行時間 (たとえば、ループ内で繰り返し宣言する)、伝統です。ルーチンの開始時にすべての変数が使用されることを期待している VBA プログラマが何十万人もいるに違いないため、これはおそらく正当な理由です。このプラクティスの利点、または少なくともそれがどこから来たのかを説明するかもしれない、私が見逃したものはありますか?