使用VBA将VBA代码添加到MS Access用户窗体

使用VBA将VBA代码添加到MS Access用户窗体,vba,ms-access,ms-access-2007,Vba,Ms Access,Ms Access 2007,我有一个自动生成表单的脚本。此表单仅为临时表单,可在关闭后删除。为了避免手动操作,我想添加一个按钮或form_close()方法,其中应该有一些代码来删除表单(如果可能的话) 否则,我希望能够防止te弹出窗口迫使我保存表单,并在关闭表单后为其命名(如下图所示) 我无法禁用此弹出窗口,也无法使用VBA代码添加VBA代码。有人能告诉我这是否可能,或者举个例子吗 据我所知,在不保存模块的情况下,无法将模块添加到表单中,表单需要在设计视图中添加模块(就像通过GUI添加模块一样) 要从起点开始(您有一个

我有一个自动生成表单的脚本。此表单仅为临时表单,可在关闭后删除。为了避免手动操作,我想添加一个按钮或form_close()方法,其中应该有一些代码来删除表单(如果可能的话)

否则,我希望能够防止te弹出窗口迫使我保存表单,并在关闭表单后为其命名(如下图所示)


我无法禁用此弹出窗口,也无法使用VBA代码添加VBA代码。有人能告诉我这是否可能,或者举个例子吗

据我所知,在不保存模块的情况下,无法将模块添加到表单中,表单需要在设计视图中添加模块(就像通过GUI添加模块一样)

要从起点开始(您有一个打开的未保存表单):

请注意,这会提示进行数据库范围的保存。如果有任何未保存的打开对象,系统将提示您保存它们


显然,您可以在使用表单后删除表单,但您必须主动执行此操作,而不是不保存表单。

您不需要表单中的VBA代码来执行此操作,只需从按钮的
OnClick
事件调用公共函数即可

' This is called from the "Close" button on the temp form
Public Function CloseWithoutSave(fName As String)
    DoCmd.Close acForm, fName, acSaveNo
End Function

' Demo
Public Sub CreateTestForm()

    Dim F As Form
    Dim btn As CommandButton

    Set F = Application.CreateForm()
    F.Caption = "This is a test form!"

    Set btn = CreateControl(F.Name, acCommandButton, Left:=100, Top:=100)
    btn.Caption = "Close me"
    btn.OnClick = "=CloseWithoutSave(""" & F.Name & """)"

    ' Open test form in form view
    DoCmd.Restore
    DoCmd.OpenForm F.Name, acNormal

End Sub

为什么不使用一个简单的InputBox()函数呢?谢谢您的回答。问题是,我不想保存表单,让用户手动删除它。用户无法访问导航窗格。安德烈提供的答案是有效的。注意,我的答案主要是有用的,因为它回答了你的问题,搜索的人可以使用它。如果需要,您可以添加一个on close->delete表单,但是如果您不想实际使用close按钮或任何其他VBA,Andre的解决方案更简单。
' This is called from the "Close" button on the temp form
Public Function CloseWithoutSave(fName As String)
    DoCmd.Close acForm, fName, acSaveNo
End Function

' Demo
Public Sub CreateTestForm()

    Dim F As Form
    Dim btn As CommandButton

    Set F = Application.CreateForm()
    F.Caption = "This is a test form!"

    Set btn = CreateControl(F.Name, acCommandButton, Left:=100, Top:=100)
    btn.Caption = "Close me"
    btn.OnClick = "=CloseWithoutSave(""" & F.Name & """)"

    ' Open test form in form view
    DoCmd.Restore
    DoCmd.OpenForm F.Name, acNormal

End Sub