プロシージャの中でワークシートを明示せずにRangeオブジェクトを使った場合、どのワークシートのRangeオブジェクトが参照されるかの実験。
Sheet1とSheet2の各々のセル 'A1' に '名前' という名前のNameを作る。
Sheet1.Names.Add Sheet1!名前, =Sheet1!$A$1
Sheet2.Names.Add Sheet2!名前, =Sheet2!$A$1
そして、Sheet1モジュールに下記のプロシージャを書き、実行する。
Public Sub TestSheet1Proc()
' (1)
Debug.Print Range("A1").Parent.Name
' (2)
Debug.Print Cells(1, 1).Parent.Name
' (3)
Debug.Print Range("名前").Parent.Name
End Sub
イミディエイト・ウインドに 'Sheet1' が3行出力される。
Sheet2モジュールのプロシージャから Sheet1.TestSheet1Proc を呼び出して実行したらどうなるか?
結果は変わらず、'Sheet1' が3行出力される。
ThisWorkbookモジュールからでも同様。
TestSheet1Proc を標準モジュール又はThisWorkBookモジュールにコピペして実行した場合、どうなるか?
結果はアクティブ・シートが何かで異なる。
Sheet1がアクティブの場合、'Sheet1' が3行出力される。
Sheet2がアクティブの場合、'Sheet2' が3行出力される。
Sheet3がアクティブの場合、'Sheet3' が2行出力されるが、(3)でエラーとなる。
Sheet3に '名前' という名前のNameを作ればこのエラーは出なくなる。
シート・モジュール内でワークシートを明示せずにRangeオブジェクトを使用した場合、常にそのシートのRange(セル)が参照される。
標準モジュールやThisWorkbookモジュールでワークシートを明示せずにRangeオブジェクトを使用した場合、アクティブ・シートのRange(セル)が参照される。
0 件のコメント:
コメントを投稿