アプリ版:「スタンプのみでお礼する」機能のリリースについて

 今、ユーザフォームに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

A 回答 (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
    • good
    • 1
この回答へのお礼

有難う御座います。大変簡単なコードになりました。

お礼日時:2004/09/19 05:23

 ははは、そりゃ大変だ。



 ところでVBAにはコントロール配列の機能はなさそうだ。Indexプロパティが無い。
 では方法は無いかと言うと、FormオブジェクトのプロパティControlsは、そのフォームが持っているコントールのコレクションオブジェクトを返す。で、コレクションの中で名前を指定すれば該当するNameプロパティが設定されているオブジェクトを返す。
 ようはこういう事だ。

 Me.Controls("Label3").Caption = "ラベルだよ~ん"

 コントール名が「文字列」として操作できるのなら、後は・・・・な? もう分かったよな。
    • good
    • 1
この回答へのお礼

有難う御座います。深夜の質問ということと、自分なりに調べても該当するものがなかったのでほぼ諦めて、Label1~82まで作り、エラーの除去をしていました。まさか、Controlsがそのような意味だとは知りませんでした。50行近い、Select Case が、わずか5行程度のFor文になり大変感謝しております。有難う御座いました。

お礼日時:2004/09/19 05:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!