| 
    
     |  | おはようございます。 「変数の値が初期化されてしまう現象について」、今までもこのサイトで幾たびか
 話題に上がっていました。しかし、何が起因で変数が初期化されてしまうのかについては、情報が少なかったように思います。
 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では、起こらない」とか、「安心して!!(?)、バグだよ」とか
 情報頂きたいのですが、よろしくお願いします。
 
 |  |