• ベストアンサー

Shをウォッチウインドウに登録して値を確認した時

vbaの事でよくわからないので教えてください。 エクセルなのですが Private Sub Workbook_NewSheet(ByVal Sh As Object) Debug.Print Sh.Name End Sub で、 End Subの所にブレークポイントを設置して Shをウォッチウインドウに登録して値を確認した時、値に何も入ってないのですがなぜですか? Debug.Print Sh.Name した時にシート名は取得されるのだから値は入ってるべきだと思うのですが 画像のように「変数なし」となります。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

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

HJHDYTEHYNTFO
質問者

お礼

ありがとうございます。

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#2、撤回します。 そんなに単純な話ではなかったです。 失礼しました。

HJHDYTEHYNTFO
質問者

お礼

ありがとうございます。

回答No.3

VBA自体の質問とは違うような気がします。 ずいぶん、ややこしい設定をして、それで、うまく行っていないのは、なぜかと言われても、実務上の問題とは違うわけですね。 ウォッチウィンドウを見る限りは、Shって、Objectだから、それ自体は取れているわけです。確かに、Shは、変数ではあるけれども、ウォッチ式は、その中の「値」をみるためではないでしょうか?Shでしたら、.Name や .Index などの見れるプロパティを「ウォッチ式の編集」でつけます。この「変数」は、変化する値だと思います。 こういう場合、私は、ローカルウィンドウだけを使って内容を確認します。そのほうが早いからです。

HJHDYTEHYNTFO
質問者

お礼

ありがとうございます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> Shをウォッチウインドウに登録して shには.(ドット)があるから、Sh.nameまで指定して初めて変数となるのでは?

HJHDYTEHYNTFO
質問者

お礼

ありがとうございます。