在 ms 访问中使用“IF”和“DLookup”

Posted

技术标签:

【中文标题】在 ms 访问中使用“IF”和“DLookup”【英文标题】:using "IF" with "DLookup" in ms access 【发布时间】:2021-07-08 07:12:28 【问题描述】:

我正在 MS Access 中制作表格,我的版本是 Office 2019 的 2019。我遇到重复输入购买商品发票的问题。每个供应商都有自己定义“发票编号”的方式,有时他们使用相似的数字,因为有些使用“日期”来定义他们的发票编号,例如,公司 A 发票编号是 202107001,公司 B 也有 202107001,因为它是 7 月2021 年,恰好是他们当月的“第一张账单”……一些供应商没有“发票号”。因为他们是个人销售手工制品。

因此,我必须编写 vba 代码以防止输入我们供应商的“重复”发票号码!这是我的无效代码... 即使它不起作用,也会显示“未找到方法或数据”!请问有大神帮忙吗?

这是我打算用下面的代码做的条件 "如果输入的供应商发票号码根据自己的识别方案是重复值,则消息框应显示为vba代码的后半部分..."

Private Sub txtIMHead_supinvoicenumber_AfterUpdate()

    Dim supinvoicenumberstring As String
    
    
    supinvoicenumberstring = Me.IMHead_supinvoicenumber.Value
    
    
    If Me.txtHead_supinvoicenumber = DLookup("[IMHead_supinvoicenumber]", "tbl_IMHead", txt_IMHead_supid) Then
    MsgBox "This supplier's invoice number" & supinvoicenumberstring & ",has been recorded!" _
    & vbCr & " Please stop the process and record another invoice!" & vbCr & "Thank you very much!"
    Me.Undo
    
    End If

End Sub

【问题讨论】:

【参考方案1】:

WHERE CONDITION 参数需要指定条件适用的字段:

DLookup("[IMHead_supinvoicenumber]", "tbl_IMHead", "some field name here=" & Me.txt_IMHead_supid)

但是,该表达式将从与给定 supid 匹配的第一条记录返回 IMHead_supinvoicenumber。您需要知道所选 supid 的发票编号是否已经存在,因此也必须在条件中使用发票编号。

If Not IsNull(DLookup("[IMHead_supinvoicenumber]", "tbl_IMHead", _
   "some field name here=" & Me.txt_IMHead_supid & _
   " AND IMHead_supinvoicenumber='" & supinvoicenumberstring & "'")) Then

一个选项是 DCount:

If DCount("*", "tbl_IMHead", "some field name here=" & Me.txt_IMHead_supid & _
   " AND IMHead_supinvoicenumber='" & supinvoicenumberstring & "'") > 0 Then

【讨论】:

您好 June7,请问您这里的“某个字段名称”是什么意思? 我不知道 tbl_IMHead 中适用此标准的字段名称。如果我猜的话,应该是 IMHead_supid。

以上是关于在 ms 访问中使用“IF”和“DLookup”的主要内容,如果未能解决你的问题,请参考以下文章

MS Access使用DLookup的结果循环

查询或 dsum 中的 MS Access 性能 dlookup?

对 MySql 的 DLookUp 查询

MS Access DLookup 文本字段语法问题

如何在访问表单上的文本框的验证规则中使用 DLookup

访问 2010 组合框 - 更新后无法 DLookup 结果