首页 > 解决方案 > Access 2016 中的 Dlookup 中的变量返回运行时错误 13 - 类型不匹配

问题描述

逻辑并不复杂。该应用程序使用一个临时表,其中附加了报告的数据。运行报告后,数据将被清除。最初,客户告诉我,他将输入所有数据(通过参加活动的人的出席情况)将立即完成。现在,情况发生了变化。我在临时表中查找最大 ID - 如果行数大于 0。然后我想使用 dlookup 让客户知道她在哪里停下来,以免他们产生更多问题。这是逻辑:

Dim VMax As Variant
Dim VNFind As String
VMax = DMax("foodpantryid", "signin_sheet_data") 'This works correctly
MsgBox VMax 'This works correctly
VNFind = DLookup("last_name", "Dat_household_member", "[household_id]" = VMax) 'I get the type mismatch/error 13 here.
MsgBox VNFind 'so this never works

附加信息:

  1. Household_id 是一个长整数。当我将其更改为整数时,我收到错误 94(无效使用 null)。
  2. 我尝试将 VMax 设置为变体、整数和长整数。仍然没有成功。我认为变体会起作用。
  3. 如果我不包含“[household_id]”= VMax,则 DLookup 有效。
  4. 我尝试在“”中包含 =VMax,但也失败了。这会产生 2471 错误。

标签: vbams-accessms-access-2016

解决方案


您已将=字符串分隔符放在外面。

这意味着:假设您的 ID 是 5。那么参数是"[household_id]" = 5"[household_id]"这是 string和 number之间的比较5,这会导致类型不匹配,因为除非可以将字符串强制转换为数字,否则您无法将字符串与数字进行比较。

相反,您应该=在字符串中包含 ,并且DLookUp应该是:

DLookup("last_name", "Dat_household_member", "[household_id] = " & VMax)

或者,更好的是,使用参数。这避免了大多数类型转换和字符串连接错误。

TempVars!VMax = VMax
DLookup("last_name", "Dat_household_member", "[household_id] = TempVars!VMax")
TempVars.Remove "VMax"

推荐阅读