在表单中使用带有多个条件的Dlookup

时间:2014-01-20 19:17:29

标签: vba ms-access

我有一个表格,我输入我的零件编号和零件版本。我正在尝试编写一些VBA,所以如果单击表单上的按钮,它将搜索查询,其中包含所有部件的所有历史记录,包括部件号以及部件转速匹配。一旦找到匹配的部件号和部件转速,它就会将一些信息自动填充到表格中。

现在我让它返回匹配的零件号的数据,但是它给出了第一个找到的数据,无论零件转速如何,即返回与另一个零件编号匹配但转速不同的值。

Sub FindPartNumber_Click()
DoCmd.OpenQuery "SavedQuotesQuery" 'runs query to find any matching part numbers

'confirms if part previously exists
If IsNull(DLookup("PartNumber", "SavedQuotesQuery", "'[PartNumber]=" & Me.PartNumber _
& " AND [PartRev]=" & Me.PartRev & "'")) Then
MsgBox "Part does not previously exist. Please manually enter its characteristics", _
vbOK 'and alerts user
DoCmd.Close 'close query
Exit Sub
End If

[PartName] = DLookup("PartName", "SavedQuotesQuery", "PartNumber='" & Me.PartNumber _
& "'")
[Length] = DLookup("Length", "SavedQuotesQuery", "PartNumber='" & Me.PartNumber & _
" And PartRev = " & Me.PartRev & "'")

DoCmd.Close 'close query
End Sub

我只是在努力解决两个匹配标准的语法,还是还有其他事情在这里?

1 个答案:

答案 0 :(得分:3)

这里有很多问题。首先,DoCmd.OpenQueryDoCmd.Close没有按照您的预期行事。阅读帮助文件以了解它们应该如何使用,但就我们的目的而言,仅仅说你不需要它们就足够了。

您遇到的问题是您只在PartName DLookup调用中提供了一半的条件。因此,您不是使用匹配的PartNumber和PartRev返回PartName,而是告诉Access返回它找到的第一个记录的PartName以及匹配的PartNumber。如果有多个匹配,则实际上没有定义它返回的那个。

请尝试以下方法:

Sub FindPartNumber_Click()    
Dim MyPartName As Variant, Criteria As String

    Criteria = "PartNumber=""" & Me.PartNumber & """ AND " & _
               "PartRev= """ & Me.PartRev & """"

    'confirms if part previously exists
    MyPartName = DLookup("PartName", "SavedQuotesQuery", Criteria)
    If IsNull(MyPartName) Then
        MsgBox "Part does not previously exist. Please manually enter its characteristics", vbOK 'and alerts user
    Else
        [PartName] = MyPartName
        [Length] = DLookup("Length", "SavedQuotesQuery", Criteria)
    End If
End Sub