- ベストアンサー
VBA:ユーザフォームのラベルの指定の仕方教えてください。
今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。 Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか? やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。 -------------------------------------------- Sub セルの値をラベル表示する() For i = 1 To 20 With UserForm1.Label(i) .Caption = Cells(1, i) End With Next i End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Excel VBAではコントロール配列はサポートされていませんが、ラベルの名前をLabel1, Label2,・・・ Label20とすると、以下のコードでほぼ同じことを実現できます。 Sub セルの値をラベル表示する() For i = 1 To 20 With UserForm1.Controls("Label" & i) .Caption = Cells(1, i) End With Next i End Sub
その他の回答 (1)
- anmochi
- ベストアンサー率65% (1332/2045)
ははは、そりゃ大変だ。 ところでVBAにはコントロール配列の機能はなさそうだ。Indexプロパティが無い。 では方法は無いかと言うと、FormオブジェクトのプロパティControlsは、そのフォームが持っているコントールのコレクションオブジェクトを返す。で、コレクションの中で名前を指定すれば該当するNameプロパティが設定されているオブジェクトを返す。 ようはこういう事だ。 Me.Controls("Label3").Caption = "ラベルだよ~ん" コントール名が「文字列」として操作できるのなら、後は・・・・な? もう分かったよな。
お礼
有難う御座います。深夜の質問ということと、自分なりに調べても該当するものがなかったのでほぼ諦めて、Label1~82まで作り、エラーの除去をしていました。まさか、Controlsがそのような意味だとは知りませんでした。50行近い、Select Case が、わずか5行程度のFor文になり大変感謝しております。有難う御座いました。
お礼
有難う御座います。大変簡単なコードになりました。