Excelシートの空でない行をすべて読み取った後、ユーザーフォームに多数のチェックボックスを作成しようとしています。つまり、これらのチェックボックスは実行時に作成する必要があります。また、UserForm に CommandButton を配置したいと考えています。私が望むのは、ユーザーがこの CommandButton を押すと、チェックボックスがチェックされていることとその名前が何であるかに関する情報をコードがサブルーチンに送信できるようにすることです。
誰でも問題を解決できますか?
ユーザーフォームにチェックボックスを動的に作成しようとする代わりに (これが可能かどうかもわかりません)、ListStyle を fmListStyleOption に設定し、MultiSelect を fmMultiSelectMulti でオンにしてリストボックスを使用することを検討してください。
AddItem メソッドを使用してリストボックスにデータを入力する
For i = 0 to 9
Me.lbxDivisions.AddItem
Me.lbxDivisions.List(i) = "Checkbox " & format(i)
Next i
そして、Selected プロパティを介してどの項目がチェックされているかを決定します。
For i = 0 To lbxDivisions.ListCount - 1
If lbxDivisions.Selected(i) Then
MsgBox "Item " & Format(i) & " is selected and has value " & lbxDivisions.List(i)
End If
Next i
プログラムでフォーム コントロール (チェック ボックス、リストボックスなど) をユーザー フォームに追加できます。フォームのコード モジュール内から、
Me.Controls.Add "Forms.CheckBox.1", "CheckBox1", True)
他のコード モジュールから、フォームを名前で参照するだけですMe
。たとえば、
MyUserForm.Controls.Add "Forms.CheckBox.1", "CheckBox1", True)
個人的には、タスクでチェック ボックスを使用することが絶対に必要でない限り、より動的なコントロール (リスト ボックスやコンボ ボックスなど) を使用することをお勧めします。動的コントロールでは、サイズ、他のコントロールとの相対的な位置、ユーザーフォームのサイズ変更 (必要な場合) などを管理する必要があります。これらのコントロールにイベント処理を追加することは可能ですが (こちらを参照)、実際には制限されています (例: , それぞれが異なることをする10個のチェックボックスを追加する必要があると予想される場合, 10個のチェックボックスサブルーチンを事前に作成する必要があります. 11個のチェックボックスを作成し、事前に作成されたルーチンを10個しか作成しない場合, 最後のチェックボックスは機能しません'フォームをデザインするときにすべてのチェック ボックスを作成し、プログラムで必要に応じて設定する方が簡単Visible=True
ですVisible=False
。
したがって、リストボックスやコンボボックスのような動的コントロールを使用することをお勧めしますが、必要に応じて実行時にチェックボックスなどのフォーム コントロールを追加することもできます。