我在包含搜索字词的表单上有一个组合框。用户选择一个搜索词,并查找包含数字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的数据库中复制了此代码,但它只有一个条件,因此可以工作。我无法弄清楚我缺少的语法或类型不匹配的地方是什么。
答案 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)