Database MS Access未打开时,DMax功能不工作

Database MS Access未打开时,DMax功能不工作,database,vba,excel,ms-access,Database,Vba,Excel,Ms Access,我正在用VBA编写代码,允许使用MS Excel中的用户表单在数据库中添加新用户。提交表单后,必须自动更新数据库。我正在使用DMax函数获取表中现有的最高主键。然后我增加它以获得要添加的新用户的主键。当数据库在MS Access中打开时,代码可以完美地工作。但是,只要MS Access未打开,它就会返回错误“Sub或Function not defined.”。 以下是出现错误时突出显示的代码: userID = DMax("[UserID]", "subscriber_user") + 1

我正在用VBA编写代码,允许使用MS Excel中的用户表单在数据库中添加新用户。提交表单后,必须自动更新数据库。我正在使用
DMax
函数获取表中现有的最高主键。然后我增加它以获得要添加的新用户的主键。当数据库在MS Access中打开时,代码可以完美地工作。但是,只要MS Access未打开,它就会返回错误“Sub或Function not defined.”。 以下是出现错误时突出显示的代码:

userID = DMax("[UserID]", "subscriber_user") + 1
userID
是我的变量,
userID
是包含主键的列,
subscriber\u user
是数据库中表的名称


数据库是否需要使用MS Access打开才能正常工作?是否有另一种方法确保数据库在不通过MS Access或任何其他IDE打开的情况下得到更新?

数据库的DMax是Access VBA函数,而不是Excel VBA函数

您需要通过DAO/ADO进行连接,或者创建如下的访问对象:

Public Sub AccessDmax()

    Dim userID as Integer
    Dim oAccess As Object
    Set oAccess = CreateObject("Access.Application")

    oAccess.Visible = False
    oAccess.OpenCurrentDatabase "C:\test_databases\test.accdb"

    userID = oAccess.DMax("ID", "subscriber_user")

    oAccess.Quit
    Set oAccess = Nothing

End Sub

您应该使用DAO/ADO来更新数据,在这种情况下,您可以使用SELECT查询来获取ID。我不太清楚为什么需要获得PK。@Rory我正在使用SQL查询更新数据,效果很好。我唯一的问题是DMax函数。我对所有这些都不熟悉,我不确定自动递增在这里应该如何工作,所以我得到了最新记录的PK,这样我就可以使用代码递增它,然后将它传递到查询中,我将新记录插入表中。你的PK不是自动编号吗?如果是,则在添加数据时不需要包含它。@Rory我不是创建数据库的人,所以我不是很确定,但我正在研究它。谢谢成功了!我仍然不清楚哪些函数在Access下,哪些函数在Excel下。非常感谢。