DLookup或DMax寻找价值

时间:2014-02-01 13:03:51

标签: ms-access access-vba lookup

我确信这很简单,因为我在开始这项工作时遇到了麻烦。我使用表单为客户开具发票,其中包括[Billing_Month]字段。我想要完成的是这个。当我创建新发票时,[Billing_Month]将查看最后创建的发票(使用带有DMax的[Invoice_#]?),并填写发票[Billing_Month]

的值

我原本想要使用:Billing_Month = DMax(“Billing_Month”,“frmInvoices”),但这并没有专门为我提供最后一张发票,它只会找到最高的Billing_Month,这是一个文本字段。

我原本想要使用:Billing_Month = DLookup(“Billing_Month”,“frmInvoices”),但这并没有让我获得最后一张发票。

2 个答案:

答案 0 :(得分:0)

我会为此使用自定义函数 - 假设基础表名为tblInvoices

Function GetBillingMonthOfLatestInvoice()
  Const SQL = "SELECT TOP 1 Billing_Month FROM tblInvoices ORDER BY [Invoice_#] DESC"
  Dim RS AS DAO.Recordset
  Set RS = CurrentDb.OpenRecordset(SQL)
  If RS.EOF Then
    GetBillingMonthOfLatestInvoice = Null
  Else
    GetBillingMonthOfLatestInvoice = RS(0)
  End If
End Function

更新

上面的代码可以推广到返回其他相关字段,如下所示:

Function GetValueForLatestInvoice(FieldToLookUp As String)
  Dim RS As DAO.Recordset, SQL As String
  SQL = "SELECT TOP 1 " + FieldToLookUp + " FROM tblInvoices ORDER BY [Invoice_#] DESC"
  Set RS = CurrentDb.OpenRecordset(SQL)
  If RS.EOF Then
    GetValueForLatestInvoice = Null
  Else
    GetValueForLatestInvoice = RS(0)
  End If
End Function

要使用,请将代码复制到新的标准模块,然后对于表单上的每个相关文本框,将“属性”窗口中的“默认值”属性设置为以下内容:

=GetValueForLatestInvoice("Billing_Month")

这将是包含结算月份值的文本框;对于持有结算年度的人,您将使用

=GetValueForLatestInvoice("Billing_Year")

答案 1 :(得分:0)

您可以同时使用DLookup()DMax()的组合:

DLookup("Billing_Month","tblInvoices","[Invoice_#]=" & DMax("[Invoice_#]","tblInvoices"))