如何在ComboBox中使用名称中包含变量的事件?

时间:2017-09-12 18:03:44

标签: vba ms-access

我创建了一个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

1 个答案:

答案 0 :(得分:0)

简短的回答是:"您无法在运行时在Access中动态创建控件!"。

您可以在设计视图中执行此操作。这对向导很有帮助。

答案很长:我解决这个问题的方法是提前在表单上添加很多控件,并将net stop com.docker.service net start com.docker.service 属性设置为Visible。然后,在运行时,您可以动态地使您需要的控件可见。

另外,请考虑使用子表单。在Access中,您可以将False插入另一个Form,就好像它是Form一样。实际上,Access会插入一个显示表单的Subform-Control。

通过相应地设置其Control属性,将此子表单显示为DatasheetContinuous Forms。数据表视图看起来像一个表,而连续表单视图显示每个数据记录的子表单的一个副本。