非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Excel/VBA】フォームコントロールを動的に生成→配列化して任意の数まで増やす方法

   

前回、Excelマクロでフォームコントロールを動的に生成してボタンイベントを発生させ方法について書きました。今回はコントロールを配列にして指定する数まで増やす方法について紹介します。

 

使用例を動画にしたのでご覧ください。あらかじめコントロールを設置しなくてもソースコードの中で生成・設置させたのが前回で、今回はそれを任意の数まで増やす方法です。

 

ソースコードはこちらです。

Dim myLabel() As MSForms.Label
Dim myTextBox() As MSForms.TextBox
Dim WithEvents myButton As MSForms.CommandButton
Dim cnt As Long

Private Sub UserForm_Initialize()
   cnt = 3
   ReDim myLabel(3)
   ReDim myTextBox(3)
   
   For i = 0 To cnt
      Set myLabel(i) = Controls.Add("Forms.Label.1", "Label1")
      Set myTextBox(i) = Controls.Add("Forms.TextBox.1", "TextBox1")
      
      Call setStyle(myLabel(i), "ITEM" & (i), 13 + (i * 30), 10, 80, 30)
      Call setStyle(myTextBox(i), "", 10 + (i * 30), 100, 100, 30)
   Next

   Set myButton = Controls.Add("Forms.CommandButton.1", "CommandButton1")
   Call setStyle(myButton, "OK", 20 + (i * 30), 50, 100, 30)

End Sub

Private Sub myButton_Click()
   For i = 0 To cnt
      myTextBox(i).Text = "Text-" & (i)
   Next
End Sub

Private Sub setStyle(ctl, caption_, top_, left_, width_, height_)
   If TypeName(ctl) = "Label" Or TypeName(ctl) = "CommandButton" Then
      ctl.Caption = caption_
   End If
   ctl.Top = top_
   ctl.Left = left_
   ctl.Width = width_
   ctl.Height = height_
End Sub
 

 

スポンサーリンク

 - Excel, VBA