• ベストアンサー

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の値はどこかに保存されているのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

Public宣言した変数は、ファイルを閉じるまで値を保持します。 これは異なるマクロでの値の共通化や、 同一のマクロの繰り返し使用でのカウントアップに使うためです。 そのマクロ内だけで完結する場合は、 初期値にリセットする。:i = 0 マクロ内で変数宣言:Dim I As Long(パブリックは使用しない) のどちらかになると思います。

xcmcxm
質問者

お礼

ファイルを閉じるまで値が保持されるのですね。 ありがとうございます。参考になりました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

VBの基礎であって、(プログラミング言語一般の基礎でもある)Googleで「VB Public変数とは」とかで照会すれば、沢山の解説が有る。 またVBの解説書には必ず最初のほうに解説が有る事項。そういうものを1読してみましたか。 http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/vb_p02.htm Public Static 変数のスコープ グローバル変数 ローカル変数

xcmcxm
質問者

お礼

ありがとうございます。調べてみます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Publicで宣言しているから起きる現象? 関係ありません。 Publicの場合は、他のモジュールからもこの変数を参照出来るだけです。 Privateの場合は、他のモジュールから変数を参照する事はできません。 >Public i As Long として、プロシージャー外でグローバル変数として宣言しているので、実行の都度加算されて行きます。 http://www.k1simplify.com/vba/tipsleaf/leaf330.html

xcmcxm
質問者

お礼

グローバル変数ですか。 調べてみます。 ありがとうございます。

関連するQ&A