私は動的に作成したコンボボックスとリストボックスを必要とするExcelのフォームを持っています。つまり、各リストボックスはコンボボックスにリンクされています。最初のものはデフォルトで設定されており、別のコンボ+リストボックスを追加する必要がある場合、ユーザーは「追加」ボタンを押すことができます。だから、「追加」のコードは、ボタンは以下の通りである:動的に作成されたvbaフォームコントロールにOnChangeイベントを追加する
Private Sub AddCountry_Click()
aaa = "a"
Set comb = Controls.Add("Forms.Combobox.1", "CountryList" & Val(CountryLabel.Caption) + 1)
With comb
.Top = CountryList1.Top
.Width = CountryList1.Width
.Height = CountryList1.Height
.Left = (CountryList1.Width + 3) * Val(CountryLabel.Caption) + CountryList1.Left
.AddItem ("--Choose country--")
For i = 3 To 20
.AddItem Worksheets("Countries").Range("B" & i).Value
Next i
.Text = "--Choose country--"
End With
Set listb = Controls.Add("Forms.Listbox.1", "Countries" & Val(CountryLabel.Caption) + 1)
With listb
.Top = Countries1.Top
.Width = Countries1.Width
.Height = Countries1.Height
.Left = (Countries1.Width + 3) * Val(CountryLabel.Caption) + Countries1.Left
.ColumnCount = 2
.MultiSelect = 1
End With
CountryLabel.Caption = Val(CountryLabel.Caption) + 1
End Sub
アイデアは、コンボボックスがこれに+1するたびに追加されます(名称「CountryList」と番号を持つことになりますしなければならない、それは目に見えないラベルに格納されていること、ですボタンが押されているため)、CountryList1、CountryList2などになります。リストボックスも同じです。
ということは、コンボボックスが作成され、値(国名)が正しく追加されているということです。しかし、私はそれを後にそれらを使用する方法を取得していない?私が必要とするのは、コンボボックスが変更されたとき(ユーザーが別の国を選択した場合)、下のリストボックスには特定の値(各国ごとに異なる)を入力する必要があります。
私は、問題はコンボ/リストボックスの名前を定義することにあります。動的な名前(CountryList1、CountryList2など)を追加して、何らかの形でOnChangeイベントを追加することは可能ですか?前もって感謝します。
'ListBox Events'と' ComboBox Events'を含むクラスモジュールが必要です –
この質問をご覧ください:https://stackoverflow.com/questions/44409871/dynamic-created-user-form- 2依存のコンボボックス/ 44410821#44410821 - 私はここでそれを解決しました。 @ShaiRadoが既に言ったように、あなたは余分なクラスが必要です。あなたは私がそこに置くcComboBoxクラスのようなものの後ろにいます。 –