私は自分のユーザーフォームにコンボボックスを動的に作成しています。フォーム上のすべてのコンボボックスに同じ項目を追加したいと思います。Excel VBA動的に作成されたコンボボックスに項目を追加
私はアイテムのコレクションを作成しました(SQLステートメントとAccess DBから照会しました)。その後、コンボボックスオブジェクトを作成した後、コンボボックスに追加するコレクション内のすべての項目にfor each
というステートメントを実行しましたが、コンボボックスは挿入されません。コントロールは作成されますが、コンボボックスは空です
私は値を取得しているかどうかをチェックしました。 (私はコレクションの数を照会する行を参照してください)と私は正しい20項目を取得しています。
私は間違っていますか?
EDIT - 私は最近、フォームの表示を呼び出す親For Eachループの最後にコードを追加しました。フォームが正しく表示されない原因を、あなたのコードと間違って何もありません
Private Sub setVvalues(ByVal myCol as Collection)
Dim xSel as Object, selName as String
Dim sItem as Variant, selectItems as Collection, x as Variant
Dim con as New ADODB.Connection
Dim rs as New ADODB.Recordset
........[code that already works].........
con.Open connectionStr '<-- public String declared elsewhere
Set selectItems = New Collection
sql = "SELECT [DESCRIP] FROM tbl_setpoints_categories ORDER BY [ORD] ASC;"
rs.Open sql, con
If Not (rs.EOF And rs.BOF) Then
rs.MoveFirst
Do While Not rs.EOF
selectItems.Add rs!DESCRIP
rs.MoveNext
Loop
Else
End If
rs.Close
con.Close
Set rs = Nothing
Set con = Nothing
MsgBox(selectItems.Count) '<--- produces 20 items
'myCol is a collection (passed in this sub) of object names that will be used to produce controls
For Each x in myCol
selName = "sel" & x & "-" & i
Set xSel = frm_new_setpoints.Controls.Add("Forms.ComboBox.1", selName, True)
With xSel
.Width = 120
.Left = 384
.Height = 18
.Top = 44 + (i * 30)
End With
For Each sItem In selectItems
xSel.AddItem sItem
Next sItem
i = i + 1
Next x
'Show the form with new controls
frm_new_setpoints.Show
Set xSel = Nothing
End Sub
私はあなたのコードを新しいuserformとカスタマイズされたコレクションでテストしました。あなたのコードは私のために働く。 –
うーん...もう少しコードを追加してみましょう(私はそれがそれに影響していないと思った)。 – Sanya
どこからコードを実行していますか? –