|
おはようございます。
「変数の値が初期化されてしまう現象について」、今までもこのサイトで幾たびか
話題に上がっていました。しかし、何が起因で変数が初期化されてしまうのかについては、情報が少なかったように思います。
Win98+Excel2000ですが、簡単なコードでこの現象が再現できました(再現できると思っている私)。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=6970;id=excel
のご質問で回答をさせて頂いたのですが、
偶然にも同じようなコードを昨日作っていたところ、
標準モジュールに
'============================================
Public tes_data As Integer
'============================================
Sub main()
Call add_chkbox(Range("a1"))
tes_data = 5000
End Sub
'============================================
Function add_chkbox(rng As Range) As OLEObject
With rng
Set add_chkbox = _
.Parent.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1", Link:=False, _
DisplayAsIcon:=False, Left:=.Left, _
Top:=.Top, Width:=.Width, _
Height:=.Height)
End With
End Function
'============================================================
と言うコードでMainを実行します(コマンドボタンは作成されますし、正常に何もなく終了します)。
。
次いで同じモジュール内にある以下のコードを実行すると、
'============================================================
Sub disp_data()
MsgBox tes_data
End Sub
表示されるのは「0」です。「5000」のはずなのに・・・。
本来は、コントロール作成して、クラスモジュールにイベントコードを記述したかったのですが、「tes_data = 5000」の代わりにインスタンスを作成しても初期化されてしまいました。「フォーム」のボタンで代替しましたが・・・。
この現象について、「Win98+Excel2000だけど、こっちでは起こらない」とか、
「XPでは、起こらない」とか、「安心して!!(?)、バグだよ」とか
情報頂きたいのですが、よろしくお願いします。
|
|