使用 VBA 添加 VBA 代码到 MS Access 用户表单

Add VBA code to MS Access userform using VBA

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

否则,我希望能够防止弹出窗口强制我保存表单并在关闭表单后为其命名(如下荷兰语所示)。

我无法禁用此弹出窗口,也无法使用 VBA 代码添加 VBA 代码。谁能告诉我这是否可能并举个例子?

据我所知,您不能在不保存的情况下将模块添加到表单,而且表单需要在设计视图中才能添加模块(就像通过 GUI 添加它们一样)。

从你的起点开始(你有一个打开的未保存的表格):

Public Sub AddModuleToOpenUnsavedForm(strModuleText As String)
    'Save the form name to a variable
    Dim strFormName As String
    strFormName = Screen.ActiveForm.Name
    'Save and close the form
    DoCmd.Save acForm, strFormName
    DoCmd.Close acForm, strFormName, acSaveYes
    'Open the form back up in desing view
    DoCmd.OpenForm strFormName, acDesign
    'Add a module to it
    Forms(strFormName).HasModule = True
    'Add code to the module
    Forms(strFormName).module.InsertText strModuleText
    'Close it again
    DoCmd.Save acForm, strFormName
    DoCmd.Close acForm, strFormName, acSaveYes
    'Open the form back up again
    DoCmd.OpenForm strFormName, acNormal
End Sub

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

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

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

' 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