Access 2016中Dlookup中的变量返回运行时错误13-类型不匹配

时间:2019-03-22 03:09:49

标签: vba ms-access ms-access-2016

逻辑并不复杂。该应用程序使用一个临时表,该表中附加了报告的数据。运行报告后,将清除数据。最初,客户告诉我他将立即输入所有数据(通过参加活动的人员的出席)。现在,情况已经改变。我在临时表中查找最大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设置为variant,integer和long。仍然没有成功。我认为变种会起作用。
  3. 如果我不包含“ [household_id]” = VMax,则DLookup可以工作。
  4. 我尝试将= VMax包括在“”中,但同样失败。会产生2471错误。

1 个答案:

答案 0 :(得分:2)

您已将=放在字符串定界符之外。

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

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

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

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

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