MS Access DLookup多次查找运行时错误13类型不匹配

时间:2018-08-30 14:53:39

标签: vba ms-access access-vba

我有一个我认为很简单的问题,但我必须缺少一些东西。

这行VBA有效:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Then

但是,我需要针对2个LocID进行测试,但这不起作用:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Or "C20" Then

我想念的是-以上可能吗?

尝试第二行代码时收到错误:运行时错误13类型不匹配

3 个答案:

答案 0 :(得分:3)

这是因为您需要再次编写比较,VBA无法将“ C20”理解为有效的布尔表达式。

If Me.To = 340 And ((DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20")) Then

要获得更快的结果,可以将DLookup存储到变量中。

Dim LocID as Variant 'Put the right type here, I think it should be String
LocID = DLookup("[LocID]", "[qryMyLocation]")
If Me.To = 340 And (LocID = "C25" Or LocID = "C20") Then

编辑:由于运算符优先级,我在括号中添加了与接受的答案相同的括号。省略括号会导致

If (Me.To = 340 And LocID = "C25") Or LocID = "C20" Then

答案 1 :(得分:1)

你很近。试试这个:

If Me.To = 340 And (DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20") Then

请注意,我也添加了一些括号。

答案 2 :(得分:1)

查找仅返回一个结果,但是您可以在条件中添加所需的结果并计算返回的结果。

If Me.To = 340 And DCount("[LocID]", "[qryMyLocation]", "[LocID] = 'C25' Or [LocID] = 'C20'") > 0 Then