Staticステートメントとモジュールレベルの宣言との挙動について

最近の書き込み件数: 今日 0件、昨日 0件
未読分:2件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

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」

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com