我创建了一个Userform,它将根据用户在上一页(numofSku
)上输入的数字动态创建ComboBox。我从Access数据库填充了第一组ComboBox(skubox
)的内容,并且我想根据第一组的值填充第二组(asst
)。当然,你会使用像ComboBox1_Change()
这样的东西,但我不知道如何使用一组动态的ComboBox来做到这一点。
我用来创建组合框的代码:
Dim cCntrl As Control
Dim eCntrl As Control
Dim fCntrl As Control
Dim gCntrl As Control
Dim hCntrl As Control
Dim iCntrl As Control
For d = 1 To numofSku
Set cCntrl = Controls.Add("Forms.ComboBox.1", "", True)
Set eCntrl = Controls.Add("Forms.Label.1", "", True)
Set fCntrl = Controls.Add("Forms.ComboBox.1", "", True)
Set gCntrl = Controls.Add("Forms.Label.1", "", True)
Set hCntrl = Controls.Add("Forms.TextBox.1", "", True)
Set iCntrl = Controls.Add("Forms.Label.1", "", True)
With cCntrl
.Name = "skubox" & d
.Width = 90
.Height = 18
.top = 5 + (d * 25)
.Left = 60
End With
With eCntrl
.Caption = "SKU " & d & ":"
.Width = 35
.Height = 25
.top = 5 + (d * 25)
.Left = 25
End With
With fCntrl
.Name = "asst" & d
.Width = 45
.Height = 18
.top = 5 + (d * 25)
.Left = 190
End With
With gCntrl
.Caption = "ASST: "
.Width = 30
.Height = 25
.top = 5 + (d * 25)
.Left = 160
End With
With hCntrl
.Name = "qty" & d
.Width = 45
.Height = 18
.top = 5 + (d * 25)
.Left = 280
End With
With iCntrl
.Caption = "QTY: "
.Width = 30
.Height = 25
.top = 5 + (d * 25)
.Left = 250
End With
Next d
我用来填充第一组组合框的代码:
For e = 1 To numofSku
rst.Open "SELECT MasterSKU FROM Brand WHERE Brand = " & "'" & getBrand & "'"
rst.MoveFirst
With Me.Controls("skubox" & e)
.Clear
Do
.AddItem rst![MasterSKU]
rst.MoveNext
Loop Until rst.EOF
End With
rst.Close
Next e
答案 0 :(得分:0)
简短的回答是:"您无法在运行时在Access中动态创建控件!"。
您可以在设计视图中执行此操作。这对向导很有帮助。
答案很长:我解决这个问题的方法是提前在表单上添加很多控件,并将net stop com.docker.service
net start com.docker.service
属性设置为Visible
。然后,在运行时,您可以动态地使您需要的控件可见。
另外,请考虑使用子表单。在Access中,您可以将False
插入另一个Form
,就好像它是Form
一样。实际上,Access会插入一个显示表单的Subform-Control。
通过相应地设置其Control
属性,将此子表单显示为Datasheet
或Continuous Forms
。数据表视图看起来像一个表,而连续表单视图显示每个数据记录的子表单的一个副本。