• ベストアンサー

ラベルコントロ-ルを貼りつける方法

ユーザーフォーム上に、ラベルコントロールを50個以上 整列して貼りつけたいのです。(例えば銀行ATMのタッチパネルの50音字のようなもの。) Sub Test01() for i=1 to 60 (ラベルコントロールの発生) j=int(i/6)+1 k=(i Mod 6)+1 Form1.label1(i).Caption="" Form1.label1(i).Left=200+j*600 Form1.label1(i).Width=400 Form1.label1(i).Height=200 Form1.label1(i).Top=200+500*k next i End Sub としたいと思っていますが、肝心の(コントロールの発生)の部分のコーディングを色々調べましたが判りません。(全てコントロールはドラッグアンドドロップで 貼りつける前提の説明になっています。) (今はラベル1個から何度もコピーしてコントロール配列にして凌いでいます。) どうぞよろしくご教示をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • itohh
  • ベストアンサー率45% (210/459)
回答No.2

こんにちは。itohhといいます。 再度、投稿します。 先ほどは、ちょっと急いでいたので下手なコードでした。 もう少し、まともなコードを。 ---------------------------------------------------------------- Option Explicit Private DynLabel(3) As VB.Label ---------------------------------------------------------------- Private Sub Form_Load()   Dim i As Integer   Dim Name As String   Dim Cap As String   Dim Left As Long   Left = 400   For i = 0 To 2     Name = "DynLabel" & CStr(i + 1)     Cap = "aaaa" & CStr(i + 1)     Set DynLabel(0) = Form1.Controls.Add("VB.Label", Name)     Call subDynInit(DynLabel(0), Cap, Left, 100, 500, 800)     Left = Left + 1000   Next End Sub ---------------------------------------------------------------- Private Sub subDynInit(lbl As VB.Label, Cap As String, x As Long, y As Long, Height As Long, Width As Long)   With lbl     .Caption = Cap     .Left = x     .Top = y     .Width = Width     .Height = Height     .Visible = True   End With End Sub ----------------------------------------------------------------

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

個人的にはラベルをぺたぺたしますけどね(^^;;; #1の方の方法ですと、追加したコントロールのイベントを受け取れるようにするには、WithEventsを記述した変数を50個以上準備し、イベントプロシージャもイベントの種類*50個以上作成する必要があるので非効率的です。 (WithEventsキーワードが配列変数をサポートしていないため) クラスモジュールを使ってすっきりさせる方法もありますが、長くなるのでやめておきます。 なので、こちらの方法をお勧めします。 Label1というラベルをあらかじめ1つだけフォームに貼り付け、Indexに0を設定してあるる状態にしておいてください。 Private Sub Form_Load() Dim i As Integer For i = 1 To 50 'コントロール配列のロード Load Label1(i) '位置、サイズなどを設定 '表示する Label1(i).Visible = True Next i End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • itohh
  • ベストアンサー率45% (210/459)
回答No.3

こんにちは。itohhといいます。 すみません、バグが入っていました。 誤: Set DynLabel(0) = Form1.Controls.Add("VB.Label", Name) Call subDynInit(DynLabel(0), Cap, Left, 100, 500, 800) 正: Set DynLabel(i) = Form1.Controls.Add("VB.Label", Name) Call subDynInit(DynLabel(i), Cap, Left, 100, 500, 800) ついでに。 もし、イベントの処理が必要でしたら、No.1のアドバイスのようになります。 WithEventsとして宣言しないといけないと思います。 Private WithEvents DynLabel1 As VB.Label

全文を見る
すると、全ての回答が全文表示されます。
  • itohh
  • ベストアンサー率45% (210/459)
回答No.1

こんにちは。itohhといいます。 動的にコントロールを追加する方法は、なかなか、見つけにくいんですよね。 サンプルを作ってみました。参考にしてみてください。 -------------------------------------------------------------- Option Explicit Private WithEvents DynLabel1 As Label Private WithEvents DynLabel2 As Label Private WithEvents DynLabel3 As Label Private objDyn(3) As Object -------------------------------------------------------------- Private Sub Form_Load()   Set DynLabel1 = Form1.Controls.Add("VB.Label", "DynLabel1")   Set DynLabel2 = Form1.Controls.Add("VB.Label", "DynLabel2")   Set DynLabel3 = Form1.Controls.Add("VB.Label", "DynLabel3")   Set objDyn(0) = DynLabel1   Set objDyn(1) = DynLabel2   Set objDyn(2) = DynLabel3   Call subDynInit(objDyn(0), "aaaa1", 400, 100, 500, 800)   Call subDynInit(objDyn(1), "aaaa2", 1400, 100, 500, 800)   Call subDynInit(objDyn(2), "aaaa3", 2400, 100, 500, 800) End Sub -------------------------------------------------------------- Private Sub subDynInit(lbl As VB.Label, cap As String, x As Long, y As Long, Height As Long, Width As Long)   With lbl     .Caption = cap     .Left = x     .Top = y     .Width = Width     .Height = Height     .Visible = True   End With End Sub -------------------------------------------------------------- #行の先頭に全角スペースを使ってインデントしています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBで動的に作成したパネルの上にラベルを乗せるには?

    VB6にてプログラムで動的に作成したフレーム(Frame)の上に、動的に作成したラベル(Label)を乗せることが出来ません。 どうすれば、ラベルをフレームの上に乗せることが出来るようになるでしょうか? どなたか分かる方がいらっしゃいましたら、ご教授願います。 なお、フレームとラベルの作成は以下のようなやり方で行っています。 ' Form1 : 表示フォーム Private lbl As New LabelClass ' ラベル作成クラス Private frm As New FrameClass ' フレーム作成クラス Private Sub Form_Load() Call lbl.LabelMake(Form1, "lbl1") With lbl.makelbl .Caption = "テストラベル" .AutoSize = True .Top = 500 .Left = 500 .Visible = True End With Call frm.FrameMake(Form1, "frm1") With frm.makefrm .Caption = "テストフレーム" .Width = 2000 .Height = 2000 .Visible = True End With End Sub ' LabelClass : ラベル作成クラス Public WithEvents makelbl As Label Public Sub LabelMake(form As Object, name As String) Set makelbl = form.Controls.Add("VB.Label", name) End Sub ' FrameClass : フレーム作成クラス Public WithEvents makefrm As Frame Public Sub FrameMake(form As Object, name As String) Set makefrm = form.Controls.Add("VB.Frame", name) End Sub ※nameはオブジェクト名です

  • 動的コントロールができない

    フォームをロードしたときに ラベルを動的に貼り付けたいんですが、 Controls.Addの部分でエラーが出てしまって 手が付けれません。 どなたかお助けください。 Dim i As Integer Dim l_week As Label For i = 1 To 6 Set l_week = PN_HEAD.Controls.Add("VB.label", "label" & i) With l_week .Width = CInt(Math.Round(PN_HEAD.Width / 7)) .Height = CInt(Math.Round(PN_HEAD.Height)) .Left = (i Mod 7) * .Width .Top = 0 .Caption = aWeekDayName(i) .Alignment = ContentAlignment.MiddleCenter .Visible = True End With Next

  • excel 2003 マクロですっきりさせたい

    お世話になります。 ユーザーフォーム上の テキストボックス 商品名_1の値が空白になったら ラベルも空白にするというマクロを組みました。 ラベルがたくさんあり、何かすっきりとできる方法があれば 教えてください!>< よろしくお願いします。 Private Sub 商品名_1_Change() If 商品名_1.Value = "" Then Label1_1.Caption = "" Label1_2.Caption = "" Label1_3.Caption = "" Label1_4.Caption = "" Label1_5.Caption = "" Label1_6.Caption = "" Label1_7.Caption = "" End If End Sub

  • Visual Basic 6.0でのLabelについて質問です。

    Visual Basic 6.0でのLabelについて質問です。 今、Labelが100個あるとして、 どのラベルが押されても同じ処理をさせたい場合、どのようにプログラムを組めばよいかわかりません・・・ そこで、 Private Sub Label2_Click() Label1.Caption = "停止" End Sub Private Sub Label3_Click() Label1.Caption = "停止" End Sub Private Sub Label4_Click() Label1.Caption = "停止" End Sub    ・    ・    ・ Private Sub Label101_Click() Label1.Caption = "停止" End Sub のように100個繰り返しても良いのですが、だらだら長くなってしまうので、スマートに 処理できる方法を探しています。 もしご存知の方がいらっしゃいましたら教えていただけないでしょうか? よろしくお願いします。

  • VBAでコントロール配列を持つことは可能ですか?

    Excel2002、OSはXPです。 VBではコントロールに配列を持つことが出来ましたが、 VBAでコントロール配列を持つことは可能でしょうか? やりたいことはユーザーフォームにラベルを100個ぐらい貼り付けて、 テキストボックス入力した値がCell(i,1)と等しければ、 i番目のラベルのCaptionに文字を入力したい。という感じです。 もしVBのようにコントロール配列を持てれば、 If TextBox1.text=Cells(i,1) Then Label(i).Caption="~~" という風に出来るのですが、どうも配列の設定がVBのようにできません。 プロパティにINDEXが無いですし、オブジェクト名を同じにしたら エラーとなってしまいますし。。 もし出来ないのであれば、何か回避策のようなものはないでしょうか? 力技で100個IFを書けば出来ることは出来るのですが・・ If TextBox1.text=Cells(i,1) Then If i = 1 Then Label1.Caption="~~" ElseIf i=2 then Label2.Caption="~~" ・・・・

  • 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

  • エクセルVBAラベルの変数?

    エクセル2000VBAにて下記のように作成しました。 With ActiveSheet For i = 4 To 200 If Label1.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label6.Caption = .Cells(idx, h) Label7.Caption = .Cells(idx + 2, h) GoTo ラベル2 End If Next idx End If Next h End If Next i ラベル2: For i = 4 To 200 If Label2.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label8.Caption = .Cells(idx, h) Label9.Caption = .Cells(idx + 2, h) GoTo ラベル3 End If Next idx End If Next h End If Next i ラベル3: ・・・ End With Label1~5まで同じ処理を行うため 1~5まで変数を使用して簡単にしたいのですが Label(変数)の書き込み方がわかりません? 検索を使用しましたが検索項目が悪いのか なかなか解決しません。 何方か教えていただけないでしょうか?

  • 画面を切り替える方法

    VisualBasic2005ExpressEditionを使用しています。 そこで質問なのです。 Form1のウインドウの画像(ピクチャボックス)やラベルをクリックしたときForm2の画面を表示し、Form1を閉じるには Private Sub Label11_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label11.Click End Sub の真ん中にどういう風に記述すればいいのでしょうか。うえはラベルの場合です。 よろしくお願いします。

  • エクセルVBA 計算の繰り返し処理?

    エクセルのVBA フォーム内にて 下記、各テキストボックスの数値を変更することにより Label27にLabel28*TextBox12+TextBox13+TextBox14 Label33にLabel34*TextBox16+TextBox17+TextBox18 Label27、Label33に計算の答えを書き込みたいため 下記のように書き込みました。 Private Sub TextBox12_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox13_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox14_Change() Label27.Caption = Val(Label28.Caption) * Val(TextBox12.Value) _ + Val(TextBox13.Value) + Val(TextBox14.Value) End Sub Private Sub TextBox16_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox17_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub Private Sub TextBox18_Change() Label33.Caption = Val(Label34.Caption) * Val(TextBox16.Value) _ + Val(TextBox17.Value) + Val(TextBox18.Value) End Sub 計算は出来るのですが計算ラベル50程あるため、修正を考えて ももう少し簡素化して書き込みたいため 調べましたがヒント項目がずれているせいか回答を検索できませんでした。 どのようにすれば宜しいかご教示の程宜しくお願いいたします。

  • VBA DoEvents関数の働きと使い方を知りたい

    下記のような UserForm上の Module コードを書いてももらったのですが、DoEvents の働きが分からないのです。どなたか分かりやすく説明していただけませんでしょうか? Private i As Integer Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If Me.TextBox1.Value = Me.Label1.Caption Then Me.Label2.Caption = "正解です" Else Me.Label2.Caption = "不正解です" End If DoEvents If i < 20 Then i = i + 1 Label_Up Me.TextBox1.Value = "" Cancel = True Else MsgBox "終了です" End If End Sub Private Sub UserForm_Initialize() i = 1 Label_Up End Sub Private Sub Label_Up() Me.Label1.Caption = Sheets("Sheet1").Range("A1:A20").Cells(i).Value DoEvents End Sub