Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2016)
クラスモジュールのF8実行時の変数について
投稿日時: 20/06/03 05:54:58
投稿者: かつん

クラスモジュールを使ったプログラムにてステップ実行(F8)時に、同じ変数がローカルウィンドウ内に何故か2つ並んで表示されます。しかも、並んだ内の1つはこちらが意図していない値が代入されています。エラー等は無く、実行結果も問題はありません。しかし、疑問が残るので質問させていただきました。
 
'//標準モジュール//

Option Explicit

Sub 変数2倍()
    Dim he As Hensuu
    Set he = New Hensuu
    
    he.uketori (10)
    Debug.Print he.kaesu
End Sub

'//クラスモジュール(オブジェクト名:Hensuu)//
Dim yy As Long

Public Sub uketori(y As Long)
    yy = y * 2
End Sub

Public Function kaesu() As Long
    kaesu = yy
End Function

 
処理の説明としては、
@he.uketori (10)で、引数10を渡して2倍にしてオブジェクト内変数yyに格納
ADebug.Print he.kaesuで、@で2倍された値(20)が返ってきてイミディエイトウィンドウに表示されます。
上記をステップ実行(F8)すると「Public Function kaesu() As Long」の所で、ローカルウィンドウに以下のように表示されます。
-Me               Hensuu/Hensuu
|_yy     20       Long
 kaesu   10       Long
 kaesu   0        Long

・何故、変数「kaesu」が2つもあるのでしょうか?
・何故、1行目の「kaesu」には、代入した覚えのない10がセットされているのでしょうか?
 
最終的には、2行目の「kaesu」に20がセットされて、イミディエイトウィンドウに表示され正常終了します。
以上、お手数をおかけしますが何方かご説明いただけると幸いです。
よろしくお願いいたします。

回答
投稿日時: 20/06/04 18:27:17
投稿者: WinArrow
投稿者のウェブサイトに移動

回答ではありません。
 
こちらでもテストしました。
まったく同じ現象です。
 
別のコードでテストしたものを掲示します。
 
 
【標準モジュール】
 
Dim x As Class1
 
Sub test()
    Set x = New Class1
    MsgBox x.age(CDate("2000/2/26"))
    Set x = Nothing
End Sub
 
【クラスモジュール】
Public Function age(xBahday As Date)
    age = DateDiff("yyyy", xBahday, Date)
End Function
 
ローカルウィンドウ
プロシジャ:ageで停止したとき
「age」が2個あり、ともに値は[empty]です。
復帰するときは、下のageに結果がセットされています。
 
処理には、問題ないけど・・・
なぜ、2個表示されるかよくわかりません。
 
 
 
 

投稿日時: 20/06/05 19:30:02
投稿者: かつん

WinArrowさん
 
検証していただいたようでありがとうございます。
WinArrowさんも同じ現象が起きるということは、環境に因るという(私だけに起こる)可能性は無くなりましたね。
 
「ローカルウィンドウ クラスモジュール 同じ変数」などで検索してみましたが、核心に迫るようなものは見つかりませんね。
これだけ待って回答がWinArrowさんの1件だけとなると、知ってる人いないんじゃ説もあり得ますね。それこそMicrosoftの人間とかじゃないと分からないのですかね?特に急いでいる訳でも無いので、気長に待ってみます。

トピックに返信