DLookup Or DMax To Find Value

2019-08-31 12:32发布

问题:

I am sure this is fairly simple put I am having trouble getting started on this. I use a Form to invoice clients which includes the field [Billing_Month]. What I'm looking to accomplish is this. When I create a new invoice, the [Billing_Month] will look to the last invoice created (use [Invoice_#] with DMax?), and populate the value from that that invoices [Billing_Month]

I have thought to use: Billing_Month = DMax ("Billing_Month", "frmInvoices"), but this doesn't specifically get me the last invoice, it would just look for the highest Billing_Month, which is a text field.

I have thought to use: Billing_Month = DLookup ("Billing_Month", "frmInvoices"), But this doesn't get me the last invoice to pull from.

回答1:

I'd use a custom function for this - assuming the underlying table is called 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

Update

The above code can be generalised to return other related fields like so:

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

To use, copy the code to a new standard module, then for each relevant text box on the form, set its Default Value property in the Properties window to something like this:

=GetValueForLatestInvoice("Billing_Month")

That would be for the text box holding the billing month value; for the one holding the billing year, you would use

=GetValueForLatestInvoice("Billing_Year")


回答2:

You can use a combination of both DLookup() and DMax() like so:

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