Class 如何在VBA中打开由参数传递给类模块的窗体?

Class 如何在VBA中打开由参数传递给类模块的窗体?,class,oop,vba,Class,Oop,Vba,我创建了一个类,其中包含一个表单类型为private的私有变量,其中包含事件frmFormulary As form,它通过属性集公共属性集Formulary(frmForm As form)接收表单对象,该属性集先前在Access中创建。当我实例化这个类的一个对象时,我将这个表单传递给这个对象,这个表单已经在Access中创建,并且实际上是关闭的,并将这个表单保存在类的私有变量中,目的是在不使用DoCmd.OpenForm“formName”的情况下加载这个表单。为了使之成为可能,我使用指令f

我创建了一个类,其中包含一个表单类型为
private的私有变量,其中包含事件frmFormulary As form
,它通过属性集
公共属性集Formulary(frmForm As form)
接收表单对象,该属性集先前在Access中创建。当我实例化这个类的一个对象时,我将这个表单传递给这个对象,这个表单已经在Access中创建,并且实际上是关闭的,并将这个表单保存在类的私有变量中,目的是在不使用
DoCmd.OpenForm“formName”
的情况下加载这个表单。为了使之成为可能,我使用指令
frmFormulary.Visible=True
在类
Public Sub ShowForm()
中创建了一个子类,但没有成功。当我运行此方法时,应用程序就会停止。如何加载此表单而不必使用
DoCmd.OpenForm“formName”
但是表单对象本身通过参数传递?

请根据要求查找示例代码

这是类别clsForm代码:

----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

Private WithEvents frmFormulary As Form

Public Event OpenForm(Cancel As Integer)
Public Event LoadForm()
Public Event UnloadForm(Cancel As Integer)
Public Event CloseForm()

Public Property Set Formulary(frmForm As Form)
    Set frmFormulary = frmForm

    frmFormulary.OnOpen = "[Event Procedure]"
    frmFormulary.OnLoad = "[Event Procedure]"
    frmFormulary.OnUnload = "[Event Procedure]"
    frmFormulary.OnClose = "[Event Procedure]"
End Property

Public Sub ShowForm()
    frmFormulary.Visible = True
End Sub

Private Sub frmFormulary_Open(Cancel As Integer)
    RaiseEvent OpenForm(Cancel)
    MsgBox "Event Open from clsFormulary class"
End Sub

Private Sub frmFormulary_Load()
    RaiseEvent LoadForm
End Sub

Private Sub frmFormulary_Unload(Cancel As Integer)
    RaiseEvent UnloadForm(Cancel)
End Sub

Private Sub frmFormulary_Close()
    RaiseEvent CloseForm
End Sub

Private Sub Class_Terminate()
    Set frmFormulary = Nothing
End Sub
----------------------------------------------------------------------------------------
这是表格代码:

----------------------------------------------------------------------------------------
Option Compare Database
Option Explicit

Private Sub btnTeste_Click()
    On Error GoTo TreatError

    Dim objScreen As clsFormulary

    Set objScreen = New clsFormulary

    objScreen.Formulary (Application.CurrentProject.AllForms("frmScreenTest"))
    objScreen.ShowForm

ExitError:
    'Set objScreen = Nothing
    Exit Sub
TreatError:
    Resume ExitError
End Sub
----------------------------------------------------------------------------------------

谢谢。

当您说应用程序只是停止时,如果在该行上放置断点,程序是否继续不执行任何操作,或者您是否收到某种错误?请发布代码以便我们查看