Staticステートメントとモジュールレベルの宣言との挙動について
未読分:2件
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。
Message#2 2014年12月27日(土)10時35分 From: 管理人 | 返事 削除 変更 |
モジュールレベルで宣言した変数はブックを閉じるまで値を保持します。 ですので、sampleAとsampleBの変数aはまったく別物で、sampleBの変数aはモジュール変数ですので値が保持されていたというわけです。 |
Message#1 2014年12月27日(土)09時57分 From: 戴冠式 | 返事 削除 変更 |
現在エクセルVBAの変数のスコープについて、学習しています。 Staticステートメントがどの範囲まで値を保持するのか確認しているのですが、1つおかしな現象がありました。 以下が設定内容です。 [Module1] Dim a As Integer Sub sampleA() Static a As Integer a = a + 5 MsgBox "変数a:" & a End Sub Sub sampleB() a = a + 5 MsgBox "変数a:" & a End Sub sampleAでは、Staticステートメントを利用して変数aの値を保持しています。 宣言セクションではDimステートメントでモジュール内で利用できる変数aを宣言しています。 まずsampleAを実行するとメッセージボックスに「変数a:5」が表示されます。 再度sampleAを実行すると変数aの値は保持されていますので、「変数a:10」が表示されます。 ここまで見ると値が正常に保持されているのですが、次にsampleBを実行すると「変数a:5」が表示されます。 この時点ではStaticステートメントはプロシージャ内でしか、利用できないのかなと思うのですが、再度sampleBを実行すると「変数a:10」が表示されます。 変数aが変わったということは、sampleBもStaticステートメントの影響を受けているということなのですが、 それなら一回目にsampleBを実行したときに以下のように「変数a:15」になるのではないのかと思っています。 sampleA実行(1回目)→「変数a:5」 sampleA実行(2回目)→「変数a:10」 sampleB実行(1回目)→「変数a:15」 sampleB実行(2回目)→「変数a:20」 でも実際は以下のようになります。 こちらの原因が分からないので、もしご存知の方がいらっしゃいましたら、ご教授お願いします。 sampleA実行(1回目)→「変数a:5」 sampleA実行(2回目)→「変数a:10」 sampleB実行(1回目)→「変数a:5」 sampleB実行(2回目)→「変数a:10」 sampleA実行(3回目)→「変数a:15」 sampleB実行(3回目)→「変数a:15」 |
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降