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

基于双条件打开Access窗体时出现Type Mismatch类型不匹配错误

解决VBA组合条件打开窗体的类型不匹配错误

嘿,我一眼就瞅出问题所在了——你的stLinkCriteria字符串拼接完全搞错了逻辑,这才触发了类型不匹配错误!咱们来拆解下问题:

错误根源

  1. VBA的And是逻辑运算符,不是字符串连接符:你直接写stLinkCriteria = "[Service_User_ID]=" & ... And "[Purchase_Order_Number]=" & ...,VBA会先尝试计算前后两段的逻辑关系,而不是把它们拼成一个完整的筛选字符串,这自然会导致类型不匹配。
  2. 文本字段的引用方式错误:你把表单控件的引用Forms![frmPurchaseOrderList].[Purchase_Order_Number]整个包在了单引号里,这会让Access把这段文本当成字面量去匹配,而不是读取控件的实际值。

修正后的代码

Public Function CmdOpenPurchaseOrder()
    On Error GoTo Err_CmdOpenPurchaseOrder
    Dim stDocName As String
    Dim stLinkCriteria As String
    
    stDocName = "frmPurchaseOrders"
    ' 正确拼接双条件筛选字符串:
    ' 1. 用&连接所有字符串片段
    ' 2. 文本字段值用单引号包裹
    ' 3. 用字符串形式的" AND "连接两个条件
    stLinkCriteria = "[Service_User_ID]=" & Forms![frmPurchaseOrderList].[Service_User_ID] & _
                     " AND [Purchase_Order_Number]='" & Forms![frmPurchaseOrderList].[Purchase_Order_Number] & "'"
    
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_CmdOpenPurchaseOrder:
    Exit Function

Err_CmdOpenPurchaseOrder:
    MsgBox Err.Description
    Resume Exit_CmdOpenPurchaseOrder
End Function

额外注意事项

如果你的Purchase_Order_Number字段可能包含单引号(比如订单号是PO'123),直接拼接会导致SQL语法错误,这时候需要把单引号替换成两个单引号来转义:

' 转义文本中的单引号
Dim poNumber As String
poNumber = Replace(Forms![frmPurchaseOrderList].[Purchase_Order_Number], "'", "''")
stLinkCriteria = "[Service_User_ID]=" & Forms![frmPurchaseOrderList].[Service_User_ID] & _
                 " AND [Purchase_Order_Number]='" & poNumber & "'"

这样修改后,组合条件就能正常工作啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:07:25