重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

vbaの事でよくわからないので教えてください。
エクセルなのですが

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Debug.Print Sh.Name
End Sub
で、

End Subの所にブレークポイントを設置して
Shをウォッチウインドウに登録して値を確認した時、値に何も入ってないのですがなぜですか?

Debug.Print Sh.Name
した時にシート名は取得されるのだから値は入ってるべきだと思うのですが
画像のように「変数なし」となります。

「Shをウォッチウインドウに登録して値を確」の質問画像

A 回答 (4件)

Private Sub Workbook_NewSheet(ByVal Sh As Object)


Debug.Print Sh.Parent.Name
End Sub

↑を、試してみてください。
どうやら、親オブジェクトとの関連付けが未定義のままイベントが発効しているようですね。
一度でもSh.Parentを参照すれば、以降、ブックが開いている間は
ウォッチウィンドウ、ローカルウィンドウ、共に、正しく表示されます。
値に何も入っていない訳ではなくて、Propertiesが確定していないから表示できない、
といったところでしょうか。
何故、そういう仕様にしているのか?ということはわかりません。
ウォッチウィンドウの場合はShの代わりにActiveSheetを指定すれば、不足はないですから、
MSも仕様を直す気にならないのかも知れませんね。
むしろ、ローカルウィンドウに表示されないことの方が、問題あり、と私は思いますけれど。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/04/14 09:51

#2、撤回します。


そんなに単純な話ではなかったです。
失礼しました。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/04/14 09:51

VBA自体の質問とは違うような気がします。


ずいぶん、ややこしい設定をして、それで、うまく行っていないのは、なぜかと言われても、実務上の問題とは違うわけですね。

ウォッチウィンドウを見る限りは、Shって、Objectだから、それ自体は取れているわけです。確かに、Shは、変数ではあるけれども、ウォッチ式は、その中の「値」をみるためではないでしょうか?Shでしたら、.Name や .Index などの見れるプロパティを「ウォッチ式の編集」でつけます。この「変数」は、変化する値だと思います。

こういう場合、私は、ローカルウィンドウだけを使って内容を確認します。そのほうが早いからです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/04/14 09:51

> Shをウォッチウインドウに登録して


shには.(ドット)があるから、Sh.nameまで指定して初めて変数となるのでは?
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2013/04/14 09:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!