- ベストアンサー
Publicで宣言しているから起きる現象?
Option Explicit Public i As Long Sub test1() i = i + 1 Debug.Print i End Sub これを数回実行すると イミディエイトウインドウには 1 2 3 4 5 と記載されていきます。 なぜEnd Subで終わっているのにiの値がリセットされないのでしょうか? 「Public」で宣言しているからですか? Publicで宣言しつつ、1から開始したい場合は Sub test2() i=0 i = i + 1 Debug.Print i End Sub とするべきなのでしょうか? またtest1のiの値はどこかに保存されているのでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Public宣言した変数は、ファイルを閉じるまで値を保持します。 これは異なるマクロでの値の共通化や、 同一のマクロの繰り返し使用でのカウントアップに使うためです。 そのマクロ内だけで完結する場合は、 初期値にリセットする。:i = 0 マクロ内で変数宣言:Dim I As Long(パブリックは使用しない) のどちらかになると思います。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
VBの基礎であって、(プログラミング言語一般の基礎でもある)Googleで「VB Public変数とは」とかで照会すれば、沢山の解説が有る。 またVBの解説書には必ず最初のほうに解説が有る事項。そういうものを1読してみましたか。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p02.htm Public Static 変数のスコープ グローバル変数 ローカル変数
お礼
ありがとうございます。調べてみます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
>Publicで宣言しているから起きる現象? 関係ありません。 Publicの場合は、他のモジュールからもこの変数を参照出来るだけです。 Privateの場合は、他のモジュールから変数を参照する事はできません。 >Public i As Long として、プロシージャー外でグローバル変数として宣言しているので、実行の都度加算されて行きます。 http://www.k1simplify.com/vba/tipsleaf/leaf330.html
お礼
グローバル変数ですか。 調べてみます。 ありがとうございます。
お礼
ファイルを閉じるまで値が保持されるのですね。 ありがとうございます。参考になりました。