Document.ShapeオブジェクトのNameプロパティとは何なのか(Word)
Document.ShapeオブジェクトのNameプロパティとは何なのか
ちょっと意味がわからない現象に気づいたので、記しておく。
二つのテキストボックス
WordのDocumentに二つテキストボックスを設置してみる。
こんな感じ。
んで、次のようなコードを実行してみる。
リスト1 標準モジュール
Public Sub test() Dim shp As Word.Shape For Each shp In ActiveDocument.Shapes Debug.Print shp.Name Next End Sub
ActiveDocument
にあるShapes
コレクション(今回の場合だとテキストボックス二つのこと。)の要素であるShape
オブジェクト(つまりは、二つのテキストボックスそれぞれ)のName
プロパティの値をイミディエイト・ウインドウに出力するだけの簡単なコード。
さて、このコードの実行結果はどうなるか。
こうなるんである。
なぜか、どちらも「テキスト ボックス 2
」。なんでやねん。
インデックスで指定してみる
イミディエイト・ウインドウに
ActiveDocument.Shapes(1).Select
と打ち込んで[Enter]してみる。すると、
こうなる。納得の結果。
次に、同じようにイミディエイト・ウインドウに
ActiveDocument.Shapes(2).Select
と打ち込んで[Enter]してみる。
こうなる。これまた至極当然の結果。
では、
ActiveDocument.Shapes("テキスト ボックス 2").Select
とイミディエイト・ウインドウに打ち込んで[Enter]するとどうなるか。
こうなるのである。
???
今度は、イミディエイト・ウインドウに
ActiveDocument.Shapes("テキスト ボックス 1").Select
と入力して[Enter]。
これはさすがに実行時エラーになると思った。しかし、
なぜかエラーが出ずに、さっきと全く同じ結果になった。
おわりに
二つ目のテキストボックスは、一つ目のテキストボックスをコピーしたものなので、同じ名前になってしまったのだろうか? つまり、
- 一つ目のテキストボックスを挿入する。名前は「テキスト ボックス 1」。
- 一つ目のテキストボックスをコピーして二つ目のテキストボックスが生まれる。
- 二つ目のテキストボックスに名前「テキスト ボックス 2」が付与される。
- しかし、両者は同じものなので、一つ目のテキストボックスの名前も見かけ上「テキスト ボックス 2」になってしまう。
- ただし、元の名前「テキスト ボックス 1」は完全に消滅したわけではない。
こんなわけのわからないことになっているのだろうか???
わからんなあ。