|
皆さん、おはようございます。
>動的に作成しようと思えばできます。(Controls.Add メソッドを利用する)
>ただし、イベントまで設定することはできません。
クラスモジュールを使用するとそれらしいことは出来ます。
ユーザーフォームをひとつ用意してください(Userform1)。
クラスモジュール(Class1)に
'===========================================================
Public WithEvents chkbx As MSForms.CheckBox
Public chkid As Long
Private Sub chkbx_Change()
MsgBox "チェックボックス" & chkid & "が " & IIf(chkbx.Value, "ON", "OFF") & " になりました"
End Sub
Userform1のモジュールに
'=============================================
Private cls_chkbx() As Class1
Private clsnum As Variant
'==============================================================
Private Sub UserForm_Initialize()
clsnum = Application.InputBox("チェックボックスの数を入力", , , , , , , 1)
If TypeName(clsnum) <> "Boolean" Then
If clsnum > 0 Then
ReDim cls_chkbx(1 To clsnum)
For idx = 1 To clsnum
Set cls_chkbx(idx) = New Class1
With cls_chkbx(idx)
.chkid = idx
Set .chkbx = Controls.Add("Forms.CheckBox.1")
With .chkbx
.Top = idx * 50 + 10
.Left = 15
.Height = 16
.Font.Name = "MS ゴシック"
.Font.Size = 16
.Caption = "チェックボックス" & StrConv(idx, vbWide)
.AutoSize = True
End With
End With
Next idx
With Me
.Width = 200
.Height = (clsnum + 1) * 50 + 30
End With
End If
End If
End Sub
'======================================================
Private Sub UserForm_Terminate()
For idx = 1 To clsnum
Set cls_chkbx(idx).chkbx = Nothing
Set cls_chkbx(idx) = Nothing
Next
End Sub
標準モジュールに
'====================================
sub main()
userform1.show
end sub
としてmainを実行してみてください。
|
|