如何使用DoCmd通过关闭按钮关闭生成的VBA Access用户表单

时间:2016-05-19 14:05:33

标签: access-vba

我有一个名为Calling的主窗体。它有一个名为Travel的按钮。那个旅行按钮确实:

Private Sub btnTravel_Click()
On Error GoTo btnTravel_Click_Err

    DoCmd.OpenForm "Travel", acNormal, "", "", acFormEdit
    'If you can find a cleaner way to open a form I will be thankful.

btnTravel_Click_Exit:
    Exit Sub

btnTravel_Click_Err:
    MsgBox Error$
    Resume btnTravel_Click_Exit

End Sub

旅行信息表单正确执行。该旅行表单有一个关闭按钮,代码为:

Private Sub bntClose_Click()
    Unload Me
End Sub

按下时,关闭代码会生成“运行时错误'361':无法加载或卸载此对象。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您不需要带空字符串的逗号,也不需要acFormEdit,因为当您打开表单时,无论如何都可以编辑和添加新记录。

如果将此参数留空,则表单将以表单AllowEdits,AllowDeletions,AllowAdditions和DataEntry权限(在表单属性中)设置的数据模式中打开。

DoCmd.OpenForm "Travel", acNormal

至于下一个子例程,我会使用docmd.close而不是卸载。

Private Sub bntClose_Click()
  Me.Undo
  DoCmd.Close acForm, "Travel", acSaveNo
End Sub

me.undo是可选的,如果您不想保存,如果您想保存表单,请将acSaveNo更改为acSaveYes

  

编辑:

我刚刚重新阅读了您的问题,并在标题中注意到您要在没有docmd的情况下执行此操作。

我已经考虑过这个问题,docmd是使用VBA关闭访问表单的标准方法。我不确定你是否使用VB继承了unload,但在使用访问时我会坚持使用docmd.close。

答案 1 :(得分:0)

" Unolad me"只是在Access Form对象中不起作用。 Access希望您使用DoCmd.Open/DoCmd.Close,但您比这更聪明,并且可以使用Access Form Object作为对象。访问权限为表单类命名为您为其提供的名称前缀为"表单_"。您创建一个名为" YourForm"的表单,Access创建类" Form_YourForm"。将此类用作真实对象:

   'Declare a typed variable
   Dim f As Form_YourForm

   'Create the object
   Set f = New Form_YourForm  'This triggers the Open event

   'Use the object
   f.SetFocus
   f.Resize

   '... And eventually, dispose the object
   Set f = Nothing   
   'Remember <<Unload f>> won't work, neither you can use DoCmd.Close

此外,您可以直接使用Form_YourForm作为对象变量,因为VBA Access只是隐式创建&#34;&#34;当您第一次使用它或使用DoCmd.Open时,此对象在Form_YourForm类之外。 (是的,它有点令人困惑,但Access是为没有必要的程序员技能的用户创建的)。 但是,每次使用类型为项目中存在的任何Form Class的变量对象时,您将获得Form_YourForm类的不同实例。这意味着您可以根据需要打开任意数量的表单实例...或者它适合您计算机的内存。你不能使用DoCmd.Open来完成它。

主要&#34;缺点&#34;是你必须从另一个模块处理表单对象。您仍然可以使用&#34; Forms&#34;收集但由于您不知道给定的密钥,因此您无法轻松访问表单实例。此外,您无法从自己的代码中关闭表单,只能处理类型变量(Set f = nothing)。