基于双条件打开Access窗体时出现Type Mismatch类型不匹配错误
解决VBA组合条件打开窗体的类型不匹配错误
嘿,我一眼就瞅出问题所在了——你的stLinkCriteria字符串拼接完全搞错了逻辑,这才触发了类型不匹配错误!咱们来拆解下问题:
错误根源
- VBA的
And是逻辑运算符,不是字符串连接符:你直接写stLinkCriteria = "[Service_User_ID]=" & ... And "[Purchase_Order_Number]=" & ...,VBA会先尝试计算前后两段的逻辑关系,而不是把它们拼成一个完整的筛选字符串,这自然会导致类型不匹配。 - 文本字段的引用方式错误:你把表单控件的引用
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
相关产品推荐
相关产品推荐

