MS Access DLOOKUP带有文本和嵌套DLOOKUP用于标准

时间:2014-10-27 16:58:10

标签: ms-access access-vba syntax-error type-mismatch

我在包含搜索字词的表单上有一个组合框。用户选择一个搜索词,并查找包含数字X的表。如果类别等于字符串' PHYS',则在另一个表中查找X的RVU(一个数字)。我使用嵌套的DLOOKUP语句来查找数字X,然后使用该数字X和字符串条件来查找RVU。这是我的代码:

FH_array(0) = Val(Nz(DLookup("[RVU]", "[FORES IP Picker]", "[IP]= " & Val(Nz(DLookup("[FORES]", "[IP Number Xwalk]", "[Reference Name] = '" & Me.Ref_Name & "'"), 0))), ""))

我没有运气所以我将其分解为调试:

a = Val(Nz(DLookup("[FORES]", "[IP Number Xwalk]", "[Reference Name] = '" & Me.Ref_Name & "'"), 0))
Debug.Print "a:"; a 'returns value 279
aa = Val(nz(DLookup("[RVU]", "[FORES IP Picker]", "[IP] = " & a & " and [Cost Category] = 'PHYS')))
Debug.Print "aa:"; aa

我在变量aa的行上遇到语法错误。如果我改变了

的代码
aa = DLookup("[RVU]", "[FORES IP Picker]", "[IP] = " & a & " and [Cost Category] = 'PHYS')

aa = DLookup("[RVU]", "[FORES IP Picker]", "[Cost Category] = 'PHYS'" And "[IP] = " & a)

我遇到运行时错误13类型不匹配

所有变量都声明为变量并正确调用。数组FH_array的大小正确。我从另一个执行相同类型的嵌套DLOOKUP的数据库中复制了此代码,但它只有一个条件,因此可以工作。我无法弄清楚我缺少的语法或类型不匹配的地方是什么。

1 个答案:

答案 0 :(得分:2)

您需要一个有效的字符串作为DLookup条件选项。使用“立即”窗口可以检查最终DLookup示例中的条件。

Debug.Print "[Cost Category] = 'PHYS'" And "[IP] = " & a

这实际上是两个字符串的“逻辑连接”。 (如果您查看 And Operator 的Access帮助主题,那将更有意义。)

由于您使用And两个字符串表达式,因此Access会抱怨类型不匹配,与此更简单的示例相同:

Debug.Print "a" And "b"

因此,您需要为条件选项...

创建一个有效的字符串
a = 279
Debug.Print "[Cost Category] = 'PHYS' And [IP] = " & a
[Cost Category] = 'PHYS' And [IP] = 279

将其翻译回您问题中的最后一个DLookup ...

Dim strCriteria As String
strCriteria = "[Cost Category] = 'PHYS' And [IP] = " & a
Debug.Print strCriteria ' <- just to make sure you got what you need
aa = DLookup("[RVU]", "[FORES IP Picker]", strCriteria)