MW211 EXIT

devlog
Excel/図形の名前の既定値のなぞ
2018年07月20日
そのオートシェイプを選択した状態で、画面左上の窓(名前ボックス)には
確かに「テキスト ボックス 1」と表示されているのだが、
ExcelVBAの名前取得では「Text Box 1」となってしまう件。

典型的な例が以下。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name           '→「Text Box 1」│
└──────────────────────────────────────┘
確かに「テキスト ボックス 1」でオートシェイプを指定できているのにも関わらず
名前属性(.Name)を取得してみたら「Text Box 1」なのだ。

これは既定の場合にのみ起きる怪現象で、名前を変更すれば両者の乖離は解消する。

どうやら、既定値を気を利かして和訳表示したものの、
ExcelVBAと辻褄が合わなくなったことによるようだ。

この場合、名前属性(.Name)で「テキスト ボックス 1」の方を
取得する方法はないようなので、
気になるなら名前属性(.Name)を任意のものに変更するしかないようだ。

任意のものといっても思いつかないという場合には、自身を代入しなおせばよい。
┌──────────────────────────────────────┐
│With シート.Shapes("テキスト ボックス 1")                                   │
│    .Name = .Name                                                           │
│End With                                                                    │
└──────────────────────────────────────┘
すると、「Text Box 1」に名前ボックスの表示も統一される。

以後「テキスト ボックス 1」は使えないが………と思ったら、
以下は引き続き使えてしまった。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name           '→「Text Box 1」│
└──────────────────────────────────────┘

ちなみに名前属性(.Name)を関係ないものに変更して実験してみた。
┌──────────────────────────────────────┐
│MsgBox シート.Shapes("テキスト ボックス 1").Name             '→変更した名前│
├──────────────────────────────────────┤
│MsgBox シート.Shapes("Text Box 1").Name                      '→エラー      │
└──────────────────────────────────────┘
つまり、英語側の既定値はまさに既定値で最初だけ有効(変名したそちらへ)なのだが
日本語側の既定値は半永久的に使える存在なのかもしれない。

ややこし過ぎる。
分類:ExcelVBA