Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
嵌套Dlookup VBA_Vba_Ms Access_Dcount_Dlookup - Fatal编程技术网

嵌套Dlookup VBA

嵌套Dlookup VBA,vba,ms-access,dcount,dlookup,Vba,Ms Access,Dcount,Dlookup,我试图在消息框中显示供应商名称和一条消息,说明所选采购订单编号(来自表单上的组合框)不需要QA。从PO编号中获取供应商编号的DLookup是有效的,但我似乎无法嵌套它以从单独的表中获取供应商名称字符串。我在这个嵌套的DLookup中遗漏了什么 采购订单编号、供应商编号和供应商名称都是字符串 Private Sub VendorName_AfterUpdate() Debug.Print Me.VendorName.Value If DCount("*", "ZeroAudit

我试图在消息框中显示供应商名称和一条消息,说明所选采购订单编号(来自表单上的组合框)不需要QA。从PO编号中获取供应商编号的DLookup是有效的,但我似乎无法嵌套它以从单独的表中获取供应商名称字符串。我在这个嵌套的DLookup中遗漏了什么

采购订单编号、供应商编号和供应商名称都是字符串

Private Sub VendorName_AfterUpdate()

    Debug.Print Me.VendorName.Value

    If DCount("*", "ZeroAudit", "PONumber='" & Me.PONumber & "' and VendorName='" & Me.VendorName & "'") = 0 Then
        MsgBox "Needs QA"
    Else
        MsgBox "Vendor " & DLookup("Vendor", "Vendors", "VendorNumber = " & (DLookUp("VendorNumber","POHeader","PONumber= [Forms]!QAChecker2!PONumber.Value"))) & " — Does NOT Need QA — DIM and RETAIL CHECK REQUIRED"
    End If
    Me.PONumber.SetFocus

End Sub
你说:

采购订单编号、供应商编号和供应商名称均为字符串

因此,您需要将
DLookup
标准用单引号括起来,例如:

DCount("*", "ZeroAudit", "PONumber='" & Me.PONumber & "' and VendorName='" & Me.VendorName & "'")
这里还需要单引号:

DLookup("Vendor", "Vendors", "VendorNumber = '" & DLookUp("VendorNumber","POHeader","PONumber= [Forms]!QAChecker2!PONumber.Value") & "'")
                                             ^                                                                                        ^
                                             |                                                                                        |
                    Added single quotes -----+----------------------------------------------------------------------------------------+
但我也要回应@Mathieu Guindon关于使用局部变量代替内联
DLookup
表达式的评论

考虑以下代码的易读性-

Private Sub VendorName_AfterUpdate()
    Dim strVen As String
    Dim strVNo As String

    If DCount("*", "ZeroAudit", "PONumber='" & Me.PONumber & "' and VendorName='" & Me.VendorName & "'") = 0 Then
        MsgBox "Needs QA"
    Else
        strVNo = DLookup("VendorNumber", "POHeader", "PONumber = [Forms]!QAChecker2!PONumber")
        strVen = DLookup("Vendor", "Vendors", "VendorNumber = '" & strVNo & "'")
        MsgBox "Vendor " & strVen & " — Does NOT Need QA — DIM and RETAIL CHECK REQUIRED"
    End If
    Me.PONumber.SetFocus
End Sub

您还可以使用
Nz
表达式包围
DLookup
表达式以捕获空值,并在继续之前测试空字符串。

这一点鲜为人知,但您也可以在筛选器中使用SQL

DLookup("Vendor", "Vendors", "VendorNumber = (Select VendorNumber From POHeader Where PONumber = [Forms]!QAChecker2!PONumber.Value)")

为什么要把所有的东西都放进去?将内部
DLookup
结果捕获到局部变量中,然后在外部变量中使用该变量-将外部结果的结果捕获到其自己的变量中,并将其发送到
MsgBox
。如果每个指令一次只做一件事,调试就会容易得多…我对VBA很陌生,但我完全支持使调试变得简单!你能告诉我那是什么样子吗?
将vendorNumber变暗为字符串
,然后
vendorNumber=DLookup(“vendorNumber”,…)
;然后
Dim vendor As String
,以及
vendor=DLookup(“vendor”、“Vendors”、“VendorNumber=”&VendorNumber)
——这样,您就可以知道哪一个失败了,也可能更容易看出原因。