You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access数据表视图下按单条记录筛选组合框可用机器数据源问题

Access 生产规划窗体级联下拉实现方案

实现步骤

1. 控件基础属性设置

打开ProductionF窗体的设计视图,选中子窗体里的机器字段组合框控件,按以下设置:

  • 行来源类型:表/查询
  • 绑定列:1(对应MachineT的主键ID)
  • 列数:2(可按需调整,一般展示ID+机器名称)
  • 列宽:0cm;2cm(可按需调整,隐藏主键列仅展示机器名称)

2. 添加事件触发逻辑

需要给两个位置添加事件,保证切换记录行、修改产品时都能刷新机器下拉列表:

(1)产品字段的「更新后」事件

选中子窗体里的产品字段控件,在事件面板找到「更新后」,选择「事件过程」,点击编辑进入VBA界面,粘贴以下代码:

Private Sub cbo_Product_AfterUpdate()
    ' 刷新机器组合框的行来源,仅展示当前产品可用机器
    Me.cbo_Machine.RowSource = "SELECT MachineID, MachineName FROM MachineT " & _
        "WHERE MachineID IN (" & _
        "SELECT MachineID.Value FROM ProductT " & _
        "WHERE ProductID = " & Nz(Me.cbo_Product, 0) & ") " & _
        "OR MachineID = " & Nz(Me.cbo_Machine, 0) ' 保留已选值避免显示为空
    Me.cbo_Machine.Requery
End Sub

(2)子窗体的「当前」事件

选中子窗体的窗体对象(点击子窗体设计视图左上角的小方块即可选中),在事件面板找到「当前」,选择「事件过程」,粘贴以下代码:

Private Sub Form_Current()
    ' 切换记录行时同步刷新机器下拉列表
    Me.cbo_Machine.RowSource = "SELECT MachineID, MachineName FROM MachineT " & _
        "WHERE MachineID IN (" & _
        "SELECT MachineID.Value FROM ProductT " & _
        "WHERE ProductID = " & Nz(Me.cbo_Product, 0) & ") " & _
        "OR MachineID = " & Nz(Me.cbo_Machine, 0)
    Me.cbo_Machine.Requery
End Sub

注意:代码中的cbo_Product、cbo_Machine、MachineID、MachineName、ProductID需要替换为你实际的控件名和字段名。

3. 功能验证

保存窗体后切换到窗体视图测试:

  • 选中不同记录行时,机器下拉会自动匹配当前行产品的可用机器
  • 修改产品字段值后,机器下拉会实时刷新可选范围
  • 原有日期选择器、子窗体当日数据过滤、数据表视图录入逻辑完全保留,不影响批量录入效率

原表级Lookup方案失效原因

表级Lookup的筛选规则是全局固定的,无法识别单条记录的产品字段值做动态筛选,因此无法实现行级别的下拉范围控制,必须通过窗体控件的事件驱动实现动态行来源刷新。


内容的提问来源于stack exchange,提问作者Guilherme Brum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 20:36:03