我有一个名为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':无法加载或卸载此对象。
非常感谢您的帮助。
答案 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)。