Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Access 2016中Dlookup中的变量返回运行时错误13-类型不匹配_Vba_Ms Access_Ms Access 2016 - Fatal编程技术网

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

Vba Access 2016中Dlookup中的变量返回运行时错误13-类型不匹配,vba,ms-access,ms-access-2016,Vba,Ms Access,Ms Access 2016,逻辑并不复杂。应用程序使用一个临时表,将报表的数据追加到该表中。运行报告后,数据将被清除。最初,客户告诉我,他将立即输入所有数据(通过记录参加活动的人员的出席情况)。现在,情况改变了。我在临时表中查找max ID-如果行数大于0。然后我想使用dlookup让客户知道她在哪里停了下来,以免他们制造更多的问题。 逻辑是这样的: Dim VMax As Variant Dim VNFind As String VMax = DMax("foodpantryid", "signin_sheet_data

逻辑并不复杂。应用程序使用一个临时表,将报表的数据追加到该表中。运行报告后,数据将被清除。最初,客户告诉我,他将立即输入所有数据(通过记录参加活动的人员的出席情况)。现在,情况改变了。我在临时表中查找max 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
其他信息:

  • 住户id是一个长整数。当我把它改为整数时,我得到一个错误94(null的使用无效)
  • 我尝试将VMax设置为variant、integer和long。仍然没有成功。我认为这种变体会起作用
  • 如果我不包括“[househouse_id]”=VMax,DLookup就可以工作
  • 我尝试将=VMax包含在“”中,但也失败了。这将产生一个2471错误

  • 您已将
    =
    置于字符串分隔符之外

    这意味着:假设你的ID是5。那么参数是
    “[household\u id]”=5
    。这是字符串
    “[househouse_id]”
    和数字
    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"
    

    您已将
    =
    置于字符串分隔符之外

    这意味着:假设你的ID是5。那么参数是
    “[household\u id]”=5
    。这是字符串
    “[househouse_id]”
    和数字
    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"
    

    表定义中的
    Household\u id
    a
    Large Number
    ?如果是这样,我想您必须使用
    LongLong
    VBA变量。在表定义中
    Household\u id
    a
    Large Number
    ?如果是这样的话,我想您必须使用
    LongLong
    VBA变量。太好了,Eric!我没看到完美。谢谢,太好了,埃里克!我没看到完美。非常感谢。