2017-06-15 193 views
1

我有一个脚本可以自动生成窗体。此表格只是临时的,可以在关闭后删除。为了防止必须手动执行,我想添加一个按钮或一个form_close()方法,其中应该有一些代码来删除表单(如果这是可能的话)。使用VBA将VBA代码添加到MS Access用户窗体

否则,我希望能够防止弹出窗口强制我保存窗体并在关闭窗体后给它一个名称(如下面的荷兰语所示)。

'save form' pop-up (in Dutch)

我一直没能停用这个弹出,或使用VBA代码添加VBA代码。任何人都可以告诉我这可能,也许举个例子吗?

+0

为什么不使用简单的InputBox()函数? –

回答

1

您不需要在表单中使用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 
0

根据我的理解,不能将模块添加到表单中,并且表单需要在设计视图中添加模块(就像通过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 

注意这并促使整个数据库的保存。如果您有任何未保存的开放对象,系统会提示您保存它们。

显然,您可以在使用它之后删除表单,但您必须主动执行此操作,而不是将其保留为未保存状态。

+0

感谢您的回复。问题是,我不想保存表单并让用户手动删除它。用户无法访问导航窗格。安德烈提供的答案虽然工作。 – Muxor

+0

注意到,我的答案主要是有用的,因为它回答你的问题,搜索的人可以使用它。如果您愿意,您可以添加关闭 - >删除表单,但如果您不想实际使用关闭按钮或任何其他VBA,则Andre的解决方案更加简单。 –