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

DoCmd.OpenForm传递的companyFilter未在PROJECT_COMPANY_VIEW更新问题

问题原因及解决方案

核心错误:OpenForm参数位置错误

你当前的过滤条件不生效,最主要的原因是DoCmd.OpenForm的参数传错了位置:
DoCmd.OpenForm的第三个参数是FilterName,仅支持传入Access中预先创建保存的筛选器名称,你自定义的COMPANY_ID = xxx这类SQL过滤条件需要放到第四个参数WhereCondition的位置,你之前的代码把过滤条件放到了第三个参数的位置,系统找不到对应名称的预设筛选器,自然不会生效。

修复步骤

第一步:修正跳转代码

将双击事件的代码调整为如下内容,补全参数占位,把过滤条件放到正确的参数位:

Private Sub ProjectTenderList_DblClick(Cancel As Integer)
    Dim tenderID As Integer
    Dim companyID As Integer
    Dim companyFilter As String
    tenderID = ProjectTenderList.Column(0)
    companyID = ProjectTenderList.Column(1)
    companyFilter = "COMPANY_ID = " & companyID
    ' 第三个参数FilterName留空,第四个参数传入自定义过滤条件
    DoCmd.OpenForm "PROJECT_COMPANY_VIEW", , , companyFilter, , , tenderID
End Sub

第二步:检查目标表单配置

如果修改代码后仍然不生效,按顺序排查以下配置:

  • 打开PROJECT_COMPANY_VIEW的设计视图,在属性表的「数据」分类下,确认允许筛选属性设置为「是」。
  • 检查PROJECT_COMPANY_VIEW的Form_Open、Form_Load事件代码,确认没有覆盖Filter属性、设置FilterOn = False的逻辑,如果有这类代码,要么删除对应逻辑,要么在事件代码末尾追加Me.FilterOn = True确保传入的筛选生效。

备选解决方案:主动设置筛选

如果上述操作都无法解决,可以换用OpenArgs传值后主动设置筛选,逻辑更可控:

  1. 跳转代码修改为同时传递companyID和tenderID:
Private Sub ProjectTenderList_DblClick(Cancel As Integer)
    Dim tenderID As Integer
    Dim companyID As Integer
    tenderID = ProjectTenderList.Column(0)
    companyID = ProjectTenderList.Column(1)
    ' 用|分隔两个参数放到OpenArgs中
    DoCmd.OpenForm "PROJECT_COMPANY_VIEW", , , , , , companyID & "|" & tenderID
End Sub
  1. 在PROJECT_COMPANY_VIEW的Form_Load事件中添加筛选逻辑:
Private Sub Form_Load()
    Dim argArray As Variant
    ' 拆分OpenArgs参数
    argArray = Split(Me.OpenArgs, "|")
    ' 主动设置筛选
    Me.Filter = "COMPANY_ID = " & argArray(0)
    Me.FilterOn = True
    ' 需要使用tenderID时取argArray(1)即可
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:30:03