【问题标题】:Access: Combobox Values Depend on Previous Combobox访问:组合框值取决于上一个组合框
【发布时间】:2019-09-01 01:26:23
【问题描述】:

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

同样,如果用户为 Combobox1 选择“Blueberry”,我希望 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 事件根据我所做的测试工作,但无论我为第一个组合框选择什么,第二个组合框都是空的。

【问题讨论】:

  • 最佳实践 VBA 故障排除:设置断点 (F9) 然后单步 (F8)
  • 这些值不起作用吗?当您尝试代码时会发生什么?
  • Option Explicit 放在每个模块的顶部。它强制执行变量声明并在编译时报告未声明或拼写错误的变量/常量。要在新模块中自动启用此功能,请在 VBA 编辑器中设置 Require Variable Declaration 选项。

标签: ms-access combobox vba onchange


【解决方案1】:

组合框AddItem 方法将向组合的ValueList 添加一个项目。但我怀疑那是你真正想要的。如果用户在第一个组合中选择了 "Apple",然后返回并选择了 "Blueberry",我怀疑您希望第二个组合只包含 " Blueberry" 选项,而不是 "Apple""Blueberry" 选项。

通过直接更改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 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多