Ms access 使用VBA查找位于最后一条记录中的值

Ms access 使用VBA查找位于最后一条记录中的值,ms-access,vba,Ms Access,Vba,我知道这个问题以前可能被问过几千次,但我似乎很难找到一个现有的问题,以我能理解的方式解决这个问题 我的问题是如何访问位于表的最后一条记录中的值?例如,如果这是我的表格: personID personName personNumber 1 Sally PR32 2 Emily PR33 3 Joseph PR34 我想访问值“PR34”(如果可能的话,然后能够对其进行操作)。我知道如何使用Dmax查找最后一条记录,但我正在努

我知道这个问题以前可能被问过几千次,但我似乎很难找到一个现有的问题,以我能理解的方式解决这个问题

我的问题是如何访问位于表的最后一条记录中的值?例如,如果这是我的表格:

personID personName personNumber
1        Sally      PR32
2        Emily      PR33
3        Joseph     PR34

我想访问值“PR34”(如果可能的话,然后能够对其进行操作)。我知道如何使用Dmax查找最后一条记录,但我正在努力找出如何在其中查找值。我最终尝试获取该值,将字符串解析为数字,并将其递增1(然后再将字母追加)

如果您在DLookUp/DMax工作流中,您可以使用以下命令:

这会给你身份证,你已经知道了:

DMax("PersonID", "MyTable")
然后查找与该ID关联的personNumber:

DLookUp("personNumber", "MyTable", "personID = " & DMax("PersonID", "MyTable"))
但是,如果您想对其进行操作(或者更高效),使用记录集是一种可行的方法:

'Create a recordset
Dim rs As Recordset
'Query the last value, get the personNumber
Set rs = CurrentDb.OpenRecordset("SELECT TOP 1 personNumber FROM MyTable ORDER BY personID DESC")
'Open it up for editing
rs.Edit
'Increment the number by 1
rs.Fields("personNumber").Value = Left(rs.Fields("personNumber").Value, 2) & CInt(Mid(rs.Fields("personNumber").Value, 3, Len(rs.Fields("personNumber").Value) - 2)) + 1
'Update the recordset
rs.Update

如果您处于DLookUp/DMax工作流中,则可以使用以下命令:

这会给你身份证,你已经知道了:

DMax("PersonID", "MyTable")
然后查找与该ID关联的personNumber:

DLookUp("personNumber", "MyTable", "personID = " & DMax("PersonID", "MyTable"))
但是,如果您想对其进行操作(或者更高效),使用记录集是一种可行的方法:

'Create a recordset
Dim rs As Recordset
'Query the last value, get the personNumber
Set rs = CurrentDb.OpenRecordset("SELECT TOP 1 personNumber FROM MyTable ORDER BY personID DESC")
'Open it up for editing
rs.Edit
'Increment the number by 1
rs.Fields("personNumber").Value = Left(rs.Fields("personNumber").Value, 2) & CInt(Mid(rs.Fields("personNumber").Value, 3, Len(rs.Fields("personNumber").Value) - 2)) + 1
'Update the recordset
rs.Update

您也可以在查询中执行此操作:

UPDATE T 
SET T.personNumber = "PR" & CLng(Replace([personNumber], "PR", "")) + 1
WHERE (((T.personID)=(SELECT Max(personID) FROM T)));

其中T是表的名称。

您也可以在查询中执行此操作:

UPDATE T 
SET T.personNumber = "PR" & CLng(Replace([personNumber], "PR", "")) + 1
WHERE (((T.personID)=(SELECT Max(personID) FROM T)));

其中T是表的名称。

这看起来很有希望,但它给了我一个类型转换错误。我需要指定T.personNumber是字符串还是什么吗?嗯。。。我的机器上没有错误。您是直接作为查询运行还是通过VBA运行?事实上,它第一次是正确的。经过进一步检查,我意识到我在这个问题上提供了一个糟糕的例子。我的实际领域有一个破折号(MFT534-2017),我忘了说明这一点。当我把它拿出来的时候,这个代码运行得很好。非常感谢。这看起来很有希望,但它给了我一个类型转换错误。我需要指定T.personNumber是字符串还是什么吗?嗯。。。我的机器上没有错误。您是直接作为查询运行还是通过VBA运行?事实上,它第一次是正确的。经过进一步检查,我意识到我在这个问题上提供了一个糟糕的例子。我的实际领域有一个破折号(MFT534-2017),我忘了说明这一点。当我把它拿出来的时候,这个代码运行得很好。非常感谢。