访问:组合框值取决于以前的组合框

时间:2019-04-10 14:27:21

标签: vba ms-access combobox access-vba onchange

因此,我有两个组合框Combobox1Combobox2。如果用户为Combobox1选择了“ Apple”,我希望Combobox2的值为“ Sauce”和“ Seeds”。

同样,如果用户为Combobox1选择了“蓝莓”,我希望Combobox2的值可以是“ Pie”和“ Cobbler”。

我不得不弄清楚如何根据第一个选择为第二个组合框设置值。我认为应该是这样的...

Private Sub Combobox1_Change()
    If Combobox1= Apple Then
        Combobox2.AddItem "Sauce"
        Combobox2.AddItem "Seeds"
    End If

    If Combobox1= BlueberryThen
        Combobox2.AddItem "Pie"
        Combobox2.AddItem "Cobbler"
    End If
End Sub

onChange事件基于我所做的测试而工作,但是无论我为第一个组合框选择什么,第二个组合框都是空的。

1 个答案:

答案 0 :(得分:1)

组合框AddItem方法将项​​目添加到组合的ValueList中。但是我怀疑那是您真正想要的。如果用户在第一个组合中选择了“ Apple” ,然后返回并选择了“蓝莓” ,则我怀疑您希望第二个组合仅包含”蓝莓” 选项,而不是同时选择“苹果” “蓝莓” 选项。

通过直接更改ValueList属性来避免这种情况...

Option Compare Database
Option Explicit

Private Sub Combobox1_AfterUpdate()
    Dim strValueList As String

    Select Case Me.Combobox1.Value
    Case "Apple"
        strValueList = "Sauce;Seeds"
    Case "Blueberry"
        strValueList = "Pie;Cobbler"
    Case Else
        MsgBox "What should happen when selection = '" & Me.Combobox1.Value & "'?"
    End Select
    Me.Combobox2.RowSource = strValueList
End Sub

注意:

  1. 使用第一个组合的AfterUpdate事件,因为该事件的值已在该位置确定。
  2. Option Explicit包括为Andre suggested。没有它就不要编写VBA代码。
  3. 考虑将水果名称和选项存储在表中,并使用查询而不是组合框行源的值列表。然后,当您需要更改可用选项时,请编辑表中的数据,而不用修改VBA代码。