「ラベル名」オプションの値を取得する

f:id:accs2014:20190301182940p:plain:right:w400

 フォーム上にテキストボックスと、それに結び付いたラベルがあります。
 テキストボックスの名前は「テキスト0」、ラベルの名前は「ラベル1」とします。

f:id:accs2014:20190301182937p:plain:right:w550

 このときテキストボックスのプロパティを開くと「ラベル名」の値が「ラベル1」となっています。
 これによって2つのコントロールの対応付けがされており、この値を別のラベルの名前に変えると、その名前を持つラベルに対応付けが切り替えられます。

 さて、この「ラベル名」プロパティの値ですが、どうすれば取得できるでしょうか?
 VBAのインテリセンスや公式のオブジェクトモデル解説を見てもそれらしいものが存在しません。

 

f:id:accs2014:20190301182933p:plain:right:w550

 実はそのようなプロパティは存在しません;-o-)
 その代わりにContrlosコレクションを用いて「Controls(0)」によりラベルコントロールそのものを取得できます。よってラベルコントロールの名前はControls(0).Nameで取得できます。ここでは以下のようなコードにより、テキストボックスをクリックしたときにラベルの名前(Controls(0).Name)と標題(Controls(0).Caption)を表示させるものとします。

Option Compare Database

Private Sub テキスト0_Click()

    MsgBox Me.テキスト0.Controls(0).Name & " " & Me.テキスト0.Controls(0).Caption

End Sub

 Controlsは、フォームに含まれるコントロールやオプショングループに含まれるコントロールを取得する際に用いるものと同じものです。
 フォームやオプショングループの場合はそこに含まれるコントロールがいくつもありますが、テキストボックス(あるいはチェックボックスなど)に結び付けられるコントロールは高々1つ、つまりラベルのみであるため、Controls(0)によりラベルのプロパティが取得できるというわけです。


f:id:accs2014:20190301182930p:plain:right:w400

 テキストボックスをクリックしたところ、ラベルの名前と標題が表示されました。