Document.ShapeオブジェクトのNameプロパティとは何なのか(Word)

Document.ShapeオブジェクトのNameプロパティとは何なのか

ちょっと意味がわからない現象に気づいたので、記しておく。

二つのテキストボックス

WordのDocumentに二つテキストボックスを設置してみる。

f:id:akashi_keirin:20181231205022j:plain

こんな感じ。

んで、次のようなコードを実行してみる。

リスト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プロパティの値をイミディエイト・ウインドウに出力するだけの簡単なコード。

さて、このコードの実行結果はどうなるか。

f:id:akashi_keirin:20181231205044j:plain

こうなるんである。

なぜか、どちらも「テキスト ボックス 2」。なんでやねん。

インデックスで指定してみる

イミディエイト・ウインドウに

ActiveDocument.Shapes(1).Select

と打ち込んで[Enter]してみる。すると、

f:id:akashi_keirin:20181231205112j:plain

こうなる。納得の結果。

次に、同じようにイミディエイト・ウインドウに

ActiveDocument.Shapes(2).Select

と打ち込んで[Enter]してみる。

f:id:akashi_keirin:20181231205132j:plain

こうなる。これまた至極当然の結果。

では、

ActiveDocument.Shapes("テキスト ボックス 2").Select

とイミディエイト・ウインドウに打ち込んで[Enter]するとどうなるか。

f:id:akashi_keirin:20181231205158j:plain

こうなるのである。

???

今度は、イミディエイト・ウインドウに

ActiveDocument.Shapes("テキスト ボックス 1").Select

と入力して[Enter]。

これはさすがに実行時エラーになると思った。しかし、

f:id:akashi_keirin:20181231205234j:plain

なぜかエラーが出ずに、さっきと全く同じ結果になった。

おわりに

二つ目のテキストボックスは、一つ目のテキストボックスをコピーしたものなので、同じ名前になってしまったのだろうか? つまり、

  1. 一つ目のテキストボックスを挿入する。名前は「テキスト ボックス 1」。
  2. 一つ目のテキストボックスをコピーして二つ目のテキストボックスが生まれる。
  3. 二つ目のテキストボックスに名前「テキスト ボックス 2」が付与される。
  4. しかし、両者は同じものなので、一つ目のテキストボックスの名前も見かけ上「テキスト ボックス 2」になってしまう。
  5. ただし、元の名前「テキスト ボックス 1」は完全に消滅したわけではない。

こんなわけのわからないことになっているのだろうか???

わからんなあ。