【问题标题】:How to open a form passed by parameter to a class module in VBA?如何在VBA中打开通过参数传递给类模块的表单?
【发布时间】:2013-08-21 14:15:42
【问题描述】:

我创建了一个带有表单类型 Private WithEvents frmFormulary As Form 的私有变量的类,它通过之前在 Access 中创建的属性集 Public Property Set Formulary(frmForm As Form) 接收表单对象。当我实例化这个类的一个对象时,我将这个已经在 Access 中创建并且实际上是关闭的表单传递给这个对象,并将这个表单保存在类的私有变量中,目的是在不使用 @987654323 的情况下加载这个表单@。为了使它成为可能,我在 Public Sub ShowForm() 类中创建了一个 Sub 并使用指令 frmFormulary.Visible = True,但没有成功。当我运行此方法时,应用程序只会停止。我怎样才能加载这个表单而不必使用DoCmd.OpenForm "formName" 但是表单对象本身是通过参数传递的?

【问题讨论】:

  • 当您说应用程序只是停止时,如果在该行放置断点,程序是继续不执行任何操作还是会收到某种错误?
  • 把代码贴出来让我们看看

标签: class oop vba


【解决方案1】:

请按要求找到示例代码。

这是 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
----------------------------------------------------------------------------------------

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2023-03-26
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多